介绍
WordPress 是一个流行的开源网络发布平台。它是用 PHP 编写的,并使用 MySQL 数据库来存储动态内容。如果 WordPress 无法连接到数据库,它会显示一条公共错误消息:建立数据库连接时出错。
发生这种情况的原因有多种:RAM 或磁盘空间不足、数据库损坏、插件错误、主题行为不当、密码不正确、MySQL 错误等等。本故障排除指南提供了解决许多数据库问题的有用步骤。本指南使用example_DB_name、example_password和www.example.com等值。将这些值替换为您的站点信息。
第一步
在执行以下任何步骤之前,请检查https://my.vultr.com上的服务器控制台。如果屏幕上出现任何“内存不足”错误,请重新启动实例。这通常会暂时纠正问题。如果问题再次出现,您可能需要升级服务器以添加更多内存或磁盘空间。
进行备份
在执行任何故障排除之前,以可靠的备份作为起点至关重要。请不要跳过这些步骤。
创建快照
创建您的实例的快照。Vultr 快照允许您在出现问题时恢复精确的时间点备份。导航到https://my.vultr.com/snapshots/制作快照。有关更多详细信息,请参阅我们的快照快速入门指南。
验证 MySQL 是否正在运行
MySQL 守护程序可能已停止。使用ps和grep验证它正在运行。这应该返回一行,显示进程 ID 和命令行。
# ps -ax | grep '[m]ysqld'
1342 ? Sl 0:01 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid
查看 MySQL 日志
查看日志文件以获取信息。查找有关错误密码、损坏的表、内存或磁盘空间问题等的消息。日志信息在诊断数据库问题的根本原因时非常有用。使用tail查看error.log中近的 50 条条目。
# tail -n50 /var/log/mysql/error.log
备份数据库
在进行任何数据库更改之前,请先进行备份。除了备份数据库之外,此过程还会验证 WordPress 是否具有正确的数据库凭据。
- 使用 SSH 或Vultr 控制台以 root 身份连接到服务器。
- 使用grep找到数据库凭据。此命令返回 WordPress 连接信息。验证 DB_HOST 是否为‘localhost’。
# grep 'DB_USER\|DB_NAME\|DB_PASSWORD\|DB_HOST' /var/www/html/wp-config.php define( 'DB_NAME', 'example_DB_name' ); define( 'DB_USER', 'example_username' ); define( 'DB_PASSWORD', 'example_password' ); define( 'DB_HOST', 'localhost' );
- 使用mysqldump备份数据库。当 MySQL 提示时输入数据库密码。此示例在/root/mysqlbak.sql中创建完整数据库备份。您可以选择不同的位置。为了安全起见,请确保备份位于 /var/www 目录之外。
# mysqldump -u example_username -p example_DB_name > /root/mysqlbak.sql
- 验证备份文件已创建且大小合理,大于几 KB。它是一个文本文件,您也可以使用less检查它。
# ls -l /root/mysqlbak.sql # less /root/mysqlbak.sql
如果密码不正确,mysqldump会报错。mysqldump: Got error: 1045: Access denied for user 'example_username'@'localhost' (using password: YES) when trying to connect
重置您的数据库密码
注意:如果 mysqldump 备份成功,请跳过本节。
如果您无法使用wp-config.php中的凭据进行备份,则需要重置数据库密码。仅当 WordPress 信息不正确并且您不知道正确的密码时才重置数据库密码。在继续之前请确保您有服务器快照。
- 编辑wp-config.php。
# nano /var/www/html/wp-config.php
- 寻找这条线。
define( 'DB_PASSWORD', 'example_password' );
输入一个新的强密码来代替上面行中的 example_password。不要更改任何其他数据库信息。 - 保存文件并退出编辑器。
- 验证文件中的数据库信息。确保 DB_HOST 是localhost。
# grep 'DB_USER\|DB_NAME\|DB_PASSWORD\|DB_HOST' /var/www/html/wp-config.php define( 'DB_NAME', 'example_DB_name' ); define( 'DB_USER', 'example_username' ); define( 'DB_PASSWORD', 'example_password' ); define( 'DB_HOST', 'localhost' );
- 停止MySQL。
# service mysql stop
- 为运行时套接字创建一个文件夹并授予 mysql 用户访问权限。
# mkdir -p /var/run/mysqld # chown mysql:mysql /var/run/mysqld
- 使用–skip-grant-tables参数启动mysqld_safe并使用&将其分叉到后台。
# mysqld_safe --skip-grant-tables &
- 您可能需要点击ENTER才能重新获得提示。以 root 身份登录 MySQL。
# mysql -u root
- 输入以下命令设置新密码。
mysql> use example_DB_name; mysql> FLUSH PRIVILEGES; mysql> GRANT ALL PRIVILEGES ON example_DB_name.* TO "example_username"@"localhost" IDENTIFIED BY "new_example_password"; mysql> FLUSH PRIVILEGES; mysql> EXIT
- 重新启动 VPS 以验证 MySQL 在启动时是否正常启动。
# reboot
修复 WordPress 数据库
您可以通过向wp-config.php添加指令来尝试修复数据库。
- 编辑 wp-config.php
# nano /var/www/html/wp-config.php
- 将 WP_ALLOW_REPAIR 指令插入到“就这样,停止编辑!快乐写博客”行的上方。您会在文件末尾附近找到该行。
define( 'WP_ALLOW_REPAIR', true ); /* That's all, stop editing! Happy blogging. */
- 保存文件,退出编辑器。
- 访问以下 URL,将示例站点名称替换为您的姓名。
http://www.example.com/wp-admin/maint/repair.php
- 选择“修复数据库”或“修复并优化数据库”。这两个选项都会修复数据库。优化还可以从表中删除已删除的行、进行碎片整理并压缩数据库以提高性能。
- 完成后,从wp-config.php中删除WP_ALLOW_REPAIR指令以防止未经授权的使用。