如何排查托管在 Lightsail 中基于 WordPress 的应用程序上的数据库连接错误?
连接到基于 WordPress 的应用程序时,我收到以下一条或两条错误消息:
“Error establishing a database connection.” “One or more database tables are unavailable.The database may need to be repaired.”
如何解决这些错误?
简短描述
由于以下原因,可能会出现错误消息“Error establishing a database connection”:
- 有损坏的数据库表。
- 远程数据库连接已禁用。
- 数据库服务出现故障。
- 卷上没有足够的空间。
- 您的 WordPress 配置文件中有不正确的登录凭证。
解决方法
数据库表损坏
在浏览器中打开网站的 wp-admin 页面(例如,example.com/wp-admin),查找错误消息“One or more database tables are unavailable.The database may need to be repaired.”。如果看到此错误,则由于数据库表损坏,会出现“Error establishing database connection”错误消息。要修复损坏的表,请执行以下操作:
1. 使用文本编辑器(如 vi 编辑器)访问 wp-config.php 文件:
$ sudo vi wp-config.php
2. 在您的 wp-config.php 文件中添加以下行。确保在“That’s all, stop editing! Happy blogging”行之前添加该行。
define('WP_ALLOW_REPAIR' ,true);
3. 将上述设置添加到文件后,访问以下 URL,然后运行 Repair Database:
/wp-admin/maint/repair.php(例如,example.com/wp-admin/maint/repair.php)
4. 运行数据库修复后,删除添加到 wp-config.php 文件中的代码行。如果您不删除此行,那么任何人都可以在您的数据库上运行此修复。
禁用远程数据库连接
有时数据库驻留在远程数据库服务器上。如果数据库服务器不允许从托管网站的实例进行远程连接,则无法连接到数据库。要解决此问题,请执行以下操作:
1. 检查配置文件 wp-config.php 中的 DB_HOST 值。如果主机不是 localhost 或 127.0.0.1,则数据库将驻留在远程服务器中,如以下示例所示:
define('DB_HOST', '192.168.22.9');
2. 尝试在端口 3306 上从服务器至远程服务器运行 telnet 命令。如果无法连接,则远程服务器上的数据库配置中不允许远程连接。或者,远程服务器上的防火墙阻止了连接。请联系外部数据库拥有者或支持人员,以获取允许从 Lightsail 实例进行连接的相关帮助。
最佳做法是将网站数据库存储在 Lightsail 托管的数据库中,以实现高可用性和安全性。
数据库服务出现故障
**注意:**以下文件路径和命令可能会发生变化,具体取决于您的 Lightsail WordPress 实例是使用 MySQL 还是 MariaDB。此外,文件路径和命令会有所不同,具体取决于实例是使用本机 Linux 系统安装包(方法 A)还是独立的安装包(方法 B)。要确定数据库服务器的类型和应遵循的方法,请运行以下命令:
test ! -f "/opt/bitnami/common/bin/openssl" && echo "Approach A" || echo "Approach B"
test -d /opt/bitnami/mariadb && echo "MariaDB" || echo "MySQL"
1. 如果您确认不存在表损坏现象和远程数据库连接问题,并且 WordPress 仍然无法连接到数据库,那么您的数据库服务器可能已出现故障。发生这种情况的原因可能是数据库配置问题、服务器上流量较大、磁盘空间不足、可用内存不足等。使用以下命令检查数据库服务状态:
MySQL 数据库服务器
sudo /opt/bitnami/ctlscript.sh status mysql
MariaDB 数据库服务器
sudo /opt/bitnami/ctlscript.sh status mariadb
2. 如果上述命令显示数据库处于已停止状态,请尝试使用以下命令启动数据库服务:
MySQL 数据库服务器
sudo /opt/bitnami/ctlscript.sh start mysql
MariaDB 数据库服务器
sudo /opt/bitnami/ctlscript.sh start mariadb
3. 如果仍然无法启动数据库服务,并且在启动过程中看到错误,请检查数据库服务日志以确定根本原因并对问题进行故障排除。主数据库服务日志文件位于 Lightsail WordPress 实例中的以下位置之一:
MySQL 数据库服务器遵循方法 A:/opt/bitnami/mysql/logs/mysqld.log
MySQL 数据库服务器遵循方法 B:/opt/bitnami/mysql/data/mysqld.log
MariaDB 数据库服务器遵循方法 A:/opt/bitnami/mariadb/logs/mysqld.log
MariaDB 数据库服务器遵循方法 B:/opt/bitnami/mariadb/data/mysqld.log
磁盘空间不足和/或可用内存不足可能会影响数据库性能和连接性。使用 df 和 free 命令检查这些资源。
卷上的空间不足
如果卷上的可用磁盘空间为 100% 或略低于 100%,则数据库服务可能会出现故障。
1. 运行以下命令:
$ sudo df -h
上述命令列出了可用磁盘空间量,如以下示例所示:
Filesystem Size Used Avail Use% Mounted on devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 400K 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/nvme0n1p1 8.0G 8.0G 0G 100% / tmpfs 389M 0 389M 0% /run/user/1000
2. 如果命令输出显示您没有足够的可用空间,则可以将实例的大小调整为更大。或者,您可以从服务器中删除不必要的文件以创建可用空间。
3. 增加可用磁盘空间后,重新启动数据库服务。
WordPress 设置中的登录凭证不正确
WordPress 需要一个特定的数据库连接字符串,其中包括用户名、密码和主机来访问数据库。如果这些项目中的任何一个已更改,则 WordPress 将无法访问此数据库。
1. 要验证您使用的是正确的连接字符串,请在 wp-config.php 文件中获取连接字符串详细信息 DB_NAME, DB_HOST, DB_USER 和 DB_PASSWORD。
2. 使用连接字符串从终端访问数据库。确保使用步骤 1 中获得的值替换 DB_NAME、DB_HOST 和 DB_USER。
sudo mysql 'DB_NAME' -h 'DB_HOST' -u 'DB_USER' -p Enter password: ********
**注意:**当您输入密码时,密码不会显示,这样其他用户就无法看到密码。
3. 输入密码后按 ENTER 键。
如果您在使用上述命令时收到 Access Denied 错误,则通常意味着凭证不正确。
如果您使用的是远程数据库主机,请在 wp-config.php 文件中添加正确的连接字符串。如果数据库位于同一台服务器中,请确保 DB_NAME 是 bitnami_wordpress,DB_USER 是 bn_wordpress。
要重置数据库用户密码,请执行以下操作:
1. 使用以下命令访问 /home/bitnami/bitnami_credentials。记下根数据库密码。
sudo cat /home/bitnami/bitnami_credentials
2. 使用以下命令登录 MySQL/MariaDB shell,然后输入从上述命令获得的密码。如果您无法使用数据库根密码登录 shell,请重置密码(MySQL 或 MariaDB)
sudo mysql -u root -p Enter password: ********
3. 在 MySQL 或 MariaDB shell 中,运行以下查询以确保存在数据库 bitnami_wordpress:
show databases;
4. 运行以下查询以确保存在数据库用户 bn_wordpress:
SELECT user FROM mysql.user;
5. 使用以下查询重置数据库用户“bn_wordpress”的密码。
**注意:**用您从 wp-config.php 文件中获得的密码替换 PASSWORD。
MySQL 数据库
alter user 'bn_wordpress'@'localhost' identified by 'PASSWORD‘; alter user 'bn_wordpress'@'127.0.0.1' identified by 'PASSWORD‘;
MariaDB 数据库
alter user 'bn_wordpress'@'%' identified by 'PASSWORD‘;
**注意:**如果上述解决方案均不起作用,则可以使用备份快照还原实例。

相关内容
- 已提问 6 个月前lg...
- AWS 官方已更新 1 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前