引言

是世界上最流行的开源内容管理系统之一。 虽然它最初专注于博客,但经过多年的发展,它已经发展成为一个更灵活的网站平台。 经过近15年的发展,它已经相当完善和强大,但问题仍然可能出现。

如果你最近试图加载你的 wordpress 驱动的网站,却看到一条“错误建立数据库连接”的消息,原因通常如下:

  • 由于服务器内存不足,数据库崩溃
  • 数据库登录凭证在 WordPress 配置中不正确
  • 数据库表已被损坏

让我们逐一回顾这些问题,以确定它们是否影响到你,以及如何解决它们。

先决条件

本教程假设如下:

  • 你在一台机器上运行 WordPress,你有命令行和 sudo 访问权限
  • 你的数据库和 WordPress 运行在同一个服务器上(典型的自主 WordPress 设置,不太典型的共享 WordPress 主机环境)
  • 您知道您的数据库用户名、密码和为 WordPress 创建的数据库的名称。 这些信息应该是在你安装 WordPress 的初始设置阶段创建的。

步骤1ー检查服务器内存资源

调试这个问题的第一步是尝试登录到服务器,看看系统是否健康,MySQL 是否正在运行。

通过 SSH 登录到你的服务器,记住用你自己的用户和服务器的详细信息替换下面突出显示的部分:

  • ssh sammy@your_server_ip

如果您需要帮助登录到您的服务器,请参阅我们的文章如何连接到您的水滴与 SSH。

注意: 如果您确定您的连接细节正确,但仍然无法登录,这可能是您的服务器内存不足或负载过重。 这可能是由于你的网站流量突然爆发,并且可以解释 WordPress 错误。 您可能需要重新启动服务器才能登录。

现在我们已经成功登录,让我们检查一下我们的 MySQL 服务器是否正在运行:

  • sudo netstat -plt

Netstat 命令打印有关服务器网络系统的信息。 在这种情况下,我们需要监听 tcp 套接字(- t)上的连接(- l)的程序名(- p)。 检查输出中列出 mysqld 的一行,如下所示:

Output
Active 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 作为服务名称。 适当的替换。

应该开始了。 要验证,请重新运行上面使用的 netstat 命令,并检查 mysqld 进程的输出。

和 WordPress 都需要大量的内存才能正常运行。 如果 MySQL 由于内存不足而退出,我们应该在其错误日志中看到这方面的证据。 让我们来看看:

  • zgrep -a "allocate memory" /var/log/mysql/error.log*

Zgrep 会搜索日志文件,包括已经压缩的旧日志文件。 Tar.gz 文件。 我们正在 / var / log / mysql / 目录中的任何 error.log * 文件中搜索包含分配内存的行。

Output
2017-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

现在使用你最喜欢的文本编辑器打开配置文件:

  • sudo nano /var/www/html/wp-config.php

这将打开一个充满配置变量和一些解释性文本的文本文件。 最上面是我们的数据库连接信息:

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');

根据您的记录检查这三个变量是否正确。 如果它们看起来不正确,则根据需要进行更新,保存并退出(CTRL-O,如果使用 nano,则使用 CTRL-X)。 即使登录信息看起来正确,也值得尝试从命令行连接到数据库,以确保万无一失。 将配置文件中的细节复制并粘贴到以下命令中:

  • mysqlshow -u database_username -p

系统会提示您输入密码。 粘贴并按回车键。 如果您收到拒绝访问错误,您的用户名或密码不正确。 否则 mysqlshow 命令将显示指定用户可以访问的所有数据库:

Output
+--------------------+ | Databases | +--------------------+ | information_schema | | database_name | +--------------------+

验证其中一个数据库是否与 WordPress 配置文件中的数据完全匹配。 如果是这样,你已经验证了你的配置是正确的,并且 WordPress 应该能够成功登录到数据库。 重新载入你的网站,看看错误是否已经消失。

还是不行吗? 下一步就是修复数据库。

第三步: 修复 WordPress 数据库

有时候,由于升级失败、数据库崩溃或者插件错误,你的 WordPress 数据库可能会损坏。 这个问题可能表现为数据库连接错误,因此,如果问题不是 MySQL 服务器或配置文件,请尝试修复数据库。

Wordpress 提供了修复数据库的内置实用程序。 默认情况下,它是禁用的,因为它没有访问控制,可能是一个安全问题。 我们将启用该功能,运行维修,然后禁用它。

再次打开 wp-config.php 文件:

  • sudo nano /var/www/html/wp-config.php

在任何空白行上,粘贴以下内容:

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 安装上实现缓存来节省一些服务器资源。 有很多简单的高速缓存插件。 我们的教程,如何配置 Redis 缓存来加快 WordPress 的速度,将向您展示如何配置一个特别高效的 Redis 支持的缓存。