如何排查托管在 Lightsail 中基于 WordPress 的应用程序上的数据库连接错误?

上次更新日期:2021 年 9 月 28 日

连接到基于 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 值。如果主机不是 localhost127.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_NAMEDB_HOSTDB_USER

sudo mysql 'DB_NAME' -h 'DB_HOST' -u 'DB_USER' -p
Enter password: ********

注意:当您输入密码时,密码不会显示,这样其他用户就无法看到密码。

3.    输入密码后按 ENTER 键。

如果您在使用上述命令时收到 Access Denied 错误,则通常意味着凭证不正确。

如果您使用的是远程数据库主机,请在 wp-config.php 文件中添加正确的连接字符串。如果数据库位于同一台服务器中,请确保 DB_NAMEbitnami_wordpressDB_USERbn_wordpress

要重置数据库用户密码,请执行以下操作:

1.    使用以下命令访问 /home/bitnami/bitnami_credentials。记下根数据库密码。

sudo cat /home/bitnami/bitnami_credentials

2.    使用以下命令登录 MySQL/MariaDB shell,然后输入从上述命令获得的密码。如果您无法使用数据库根密码登录 shell,请重置密码(MySQLMariaDB

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‘;

注意:如果上述解决方案均不起作用,则可以使用备份快照还原实例。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?