介绍
Wordpress是世界上最流行的开源内容管理系统之一。 虽然它开始专注于博客,多年来,它已经发展成为一个更灵活的网站平台。 经过近十五年的发展,它是相当抛光和强大的,但问题仍然可以出现。
如果您最近尝试加载Wordpress供电的网站,而是看到一条消息,指出“建立数据库连接错误”,原因通常是以下之一:
- 数据库已经崩溃,通常是由于服务器内存不足
- 您的Wordpress配置中的数据库登录凭据不正确
- Wordpress数据库表已损坏
让我们逐一解决这些问题,以确定它们是否影响您,以及如何解决这些问题。
先决条件
本教程假定如下:
- 您正在运行Wordpress的机器上,您有命令行和
sudo
访问权限 - 您的数据库运行在与Wordpress相同的服务器上(典型的自我托管Wordpress设置,较不典型的共享Wordpress托管环境)
- 您知道您的数据库用户名,密码以及为Wordpress创建的数据库的名称。 这个信息应该是在Wordpress安装的初始设置过程中创建的。
第1步 - 检查服务器内存资源
调试此问题的第一步是尝试登录到服务器,以查看系统是否正常运行,并且MySQL正在运行。
通过SSH登录到您的服务器,记住用下面的突出部分替换您自己的用户和服务器详细信息:
ssh sammy@your_server_ip
如果您需要帮助登录到服务器,请参阅我们的文章如何使用SSH连接到您的Droplet 。
注意:如果您确定您的连接详细信息正确无误,但您仍然无法登录,可能是因为您的服务器内存不足或负载过重。 这可能是由于您的网站的流量突然爆发,并将解释WordPress的错误。 您可能需要重新启动服务器才能登录。
现在我们已经成功登录,我们来看看我们的MySQL服务器是否正在运行:
sudo netstat -plt
netstat
命令打印有关我们服务器的网络系统的信息。 在这种情况下,我们希望在tcp套接字( -t
)上监听程序( -p
)的名称来监听连接( -l
)。 检查输出的行列表mysqld
,如下所示:
OutputActive Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 localhost:mysql *:* LISTEN 1958/mysqld
tcp 0 0 *:ssh *:* LISTEN 2205/sshd
tcp 0 0 localhost:smtp *:* LISTEN 2361/master
tcp6 0 0 [::]:http [::]:* LISTEN 16091/apache2
tcp6 0 0 [::]:ssh [::]:* LISTEN 2205/sshd
tcp6 0 0 ip6-localhost:smtp [::]:* LISTEN 2361/master
如果您的输出类似,我们知道MySQL正在运行并监听连接。 如果您没有看到MySQL列出,请尝试手动启动MySQL。 在大多数系统上,看起来像这样:
sudo systemctl start mysql
一些Linux发行版(CentOS,特别是)使用mysql d
而不是简单的mysql
作为服务名称。 酌情替代
MySQL应该开始 要验证,请重新运行上面使用的netstat
命令,并检查mysqld
进程的输出。
MySQL和Wordpress都需要很好的内存才能正常运行。 如果MySQL由于内存不足而退出,我们应该在其错误日志中看到这样的证据。 我们看看吧:
zgrep -a "allocate memory" /var/log/mysql/error.log*
zgrep
将搜索日志文件,包括已经被归档为压缩的.tar.gz
文件的较旧的日志文件。 我们在/var/log/mysql/
目录中的任何error.log*
文件中error.log*
包含allocate memory
的行。
Output2017-04-11T17:38:22.604644Z 0 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
如果看到一行或多行如上,MySQL服务器的内存不足而退出。 如果只是一条线,您可能暂时遇到异常流量。 如果有许多错误行,您的服务器会经常变得内存受限。 无论哪种方式,解决方案是迁移到具有更多可用内存的服务器。 在大多数云服务提供商上,以最少的停机时间来升级现有的服务器是件简单的事情。
如果在运行zgrep
命令后看不到任何输出,那么您的服务器的内存不会耗尽。 如果您的网站仍然提供错误,请继续阅读我们的WordPress配置的下一步,并确保MySQL登录详细信息正确无误。
第2步 - 检查数据库登录凭据
如果您刚刚将服务器或托管服务提供商之间的Wordpress安装移动,则可能需要更新数据库连接详细信息。 这些存储在服务器上的一个名为wp-config.php
的PHP文件中。
首先,我们来看看我们的wp-config.php
文件:
sudo find / -name "wp-config.php"
这将从根目录( /
)向下搜索所有内容,并找到任何名为wp-config.php
文件。 如果存在这样的文件,则会输出完整路径:
Output/var/www/html/wp-config.php
现在使用您喜欢的文本编辑器打开配置文件。 我们将在这里使用nano
编辑器:
sudo nano /var/www/html/wp-config.php
这将打开一个包含配置变量和一些说明文本的文本文件。 向上是我们的数据库连接信息:
/** The name of the database for WordPress */
define('DB_NAME', 'database_name');
/** MySQL database username */
define('DB_USER', 'database_username');
/** MySQL database password */
define('DB_PASSWORD', 'database_password');
根据您的记录检查这三个变量是否正确。 如果它们看起来不正确,请根据需要进行更新,保存并退出(如果您使用nano
,则为CTRL-X
CTRL-O
,则为CTRL-X
)。 即使登录信息看起来正确,值得尝试从命令行连接到数据库,以确保。 将配置文件中的详细信息复制并粘贴到以下命令中:
mysqlshow -u database_username -p
系统将提示您输入密码。 将其粘贴并按ENTER
。 如果您收到拒绝访问错误,您的用户名或密码不正确。 否则, mysqlshow
命令将显示指定用户可以访问的所有数据库:
Output+--------------------+
| Databases |
+--------------------+
| information_schema |
| database_name |
+--------------------+
验证其中一个数据库与Wordpress配置文件中的哪一个完全一致。 如果这样做,您已经验证了您的配置是否正确,Wordpress应该能够成功登录数据库。 重新加载您的网站,看看错误是否消失。
还是行不通? 接下来要尝试的是修复数据库。
第3步 - 修复Wordpress数据库
有时,由于升级失败,数据库崩溃或故障插件,您的Wordpress数据库可能会损坏。 此问题可能表现为数据库连接错误,因此如果您的问题不是MySQL服务器或配置文件,请尝试修复您的数据库。
Wordpress提供了一个内置的实用程序来修复数据库。 默认情况下禁用,因为它没有访问控制,可能是一个安全问题。 我们将启用该功能,运行修复,然后禁用它。
再次打开wp-config.php
文件:
sudo nano /var/www/html/wp-config.php
在任何空白行上,粘贴以下内容:
define('WP_ALLOW_REPAIR', true);
这定义了Wordpress在确定是否启用修复功能时寻找的变量。
保存并关闭文件。 切换到您的浏览器并加载以下地址,确保将您的站点的域或IP地址替换为突出显示的部分:
http://www.example.com/wp-admin/maint/repair.php
将加载数据库修复页面:
按“ 修复数据库 ”按钮,您将进入结果页面,您可以在其中查看实时检查和修复:
一旦进程完成,请务必再次打开wp-config.php
文件,并删除刚刚粘贴的行。
您是否注意到有任何修理? 再次尝试您的网站,并检查错误是否消失。 如果找不到不可修复的问题,您可能需要从备份还原数据库(如果有)。 请参考我们的教程如何在MySQL中导入和导出数据库 ,以获得有关如何执行此操作的详细信息。
如果没有发现问题的数据库,那么我们仍然没有发现问题。 这可能是我们刚刚失踪的间歇性问题,或者更为晦涩的事情。 让我们再来一些其他的尝试。
结论
大多数“建立数据库连接错误”问题应通过上述三个步骤解决。 尽管如此,可能会有更多难以捉摸的问题,继续以这种方式呈现。 这里有一些更多的文章可能有助于跟踪和中和这个错误的原因:
- 高流量的频繁来源(因此性能和错误很差)是Wordpress安装常见的暴力攻击。 您可以按照如何保护WordPress免受XML-RPC攻击中和攻击 。
- 您可以通过在Wordpress安装上实现缓存来节省一些服务器资源。 Wordpress有很多简单的缓存插件。 我们的教程, 如何配置Redis缓存以加速WordPress将显示如何配置特别性能的Redis-backed缓存。