如何调试 WordPress "建立数据库连接时出错"?

介绍

WordPress 是世界上最受欢迎的开源内容管理系统之一. 虽然它开始专注于博客,但随着时间的推移,它已经发展成为网站的更灵活的平台。

如果你最近试图加载你的WordPress网站,而不是看到一个消息说错误建立数据库连接,原因最常见的是以下之一:

  • 数据库崩溃,通常是由于服务器失忆 * 数据库登录凭证在您的 WordPress 配置中不正确 * WordPress 数据库表已损坏

让我们一次又一次地走过这些问题,确定它们是否会影响你,以及如何修复它们。

前提条件

本教程假设如下:

*您正在运行WordPress在一台机器上,您有命令行和sudo访问 *您的数据库在与WordPress相同的服务器上运行(典型的自托WordPress设置,不太典型的共享WordPress托管环境) *您知道您的数据库用户名,密码,以及为WordPress创建的数据库的名称。

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

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

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

1[environment local]
2ssh sammy@your_server_ip

如果您需要帮助登录您的服务器,请参阅我们的文章 如何使用 SSH 连接到您的 Droplet

<$>[注] 注: 如果你确定你的连接详细信息是正确的,但你仍然遇到登录问题,这可能是你的服务器没有内存或很重的负载。

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

1sudo netstat -plt

netstat命令打印了我们服务器的网络系统信息,在这种情况下,我们希望在tcp插槽(t-t)上听取连接的程序名称(-p)。

1[secondary_label Output]
2Active Internet connections (only servers)
3Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
4tcp 0 0 localhost:mysql         *:*                     LISTEN 1958/mysqld
5tcp 0 0 *:ssh                   *:*                     LISTEN 2205/sshd
6tcp 0 0 localhost:smtp          *:*                     LISTEN 2361/master
7tcp6 0 0 [::]:http               [::]:*                  LISTEN 16091/apache2
8tcp6 0 0 [::]:ssh                [::]:*                  LISTEN 2205/sshd
9tcp6 0 0 ip6-localhost:smtp      [::]:*                  LISTEN 2361/master

如果您的输出类似,我们知道MySQL正在运行并听取连接. 如果您看不到MySQL列表,请尝试手动启动MySQL。

1sudo systemctl start mysql

一些Linux发行版(特别是 CentOS)使用mysqld而不是简单的mysql作为服务名称。

要验证,重新启动我们上面使用的netstat命令,并检查输出为mysqld进程。

MySQL 和 WordPress 都需要大量的内存才能正常运行. 如果 MySQL 由于内存状况低,我们应该在其错误日志中看到这一点的证据。

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

「zgrep」会搜索日志文件,包括已被存档为压缩的 .tar.gz 文件的旧日志文件,我们正在搜索包含 allocate memory 的行,在 /var/log/mysql/ 目录中的任何 error.log* 文件中。

1[secondary_label Output]
22017-04-11T17:38:22.604644Z 0 [ERROR] InnoDB: Cannot allocate memory for the buffer pool

如果你看到一个或多个类似上面的行,你的MySQL服务器就失去了内存,然后停止了。如果它只是一个行,你可能会暂时经历不寻常的流量。如果有许多错误行,你的服务器经常会受到内存限制。无论如何,解决方案是迁移到具有更多可用的内存的服务器。

如果您在运行zgrep命令后没有看到任何输出,您的服务器不会耗尽内存. 如果您的网站仍然提供错误,请继续到下一步,我们将查看我们的WordPress配置,并确保MySQL登录细节正确。

步骤 2 – 检查数据库登录凭证

如果您刚刚在服务器或托管提供商之间移动了您的WordPress安装,您可能需要更新您的数据库连接详细信息,这些信息将存储在服务器上,以PHP文件名为wp-config.php。

首先,让我们找到我们的wp-config.php文件:

1sudo find / -name "wp-config.php"

这会搜索根目录(/)的所有内容,并找到名为wp-config.php的任何文件。

1[secondary_label Output]
2/var/www/html/wp-config.php

现在使用你最喜欢的文本编辑器打开 config 文件. 我们将使用nano编辑器在这里:

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

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

1[label wp-config.php]
2/** The name of the database for WordPress */
3define('DB_NAME', 'database_name');
4
5/** MySQL database username */
6define('DB_USER', 'database_username');
7
8/** MySQL database password */
9define('DB_PASSWORD', 'database_password');

检查这些三种变量是否基于您的记录是正确的。如果它们看起来不对,如有可能更新,保存和退出(‘CTRL-O’,然后‘CTRL-X’,如果你使用‘nano’)。即使登录信息看起来是正确的,也值得尝试从命令行连接到数据库,只是为了确保。复制并粘贴从配置文件的详细信息到以下命令:

1mysqlshow -u database_username -p

您将被要求提供密码,然后插入并按下ENTER。如果您收到一个 Access denied 错误,您的用户名或密码是错误的,否则mysqlshow命令将显示指定的用户可以访问的所有数据库:

1[secondary_label Output]
2+--------------------+
3|     Databases      |
4+--------------------+
5| information_schema |
6| database_name      |
7+--------------------+

检查其中一个数据库是否完全匹配您的WordPress配置文件。如果是,您已经验证了您的配置是正确的,并且WordPress应该能够成功登录该数据库。

下一步要尝试的是修复数据库。

第3步:修复WordPress数据库

有时,由于升级失败,数据库崩溃,或错误的插件,您的WordPress数据库可能会被破坏. 此问题可能表现为数据库连接错误,所以如果您的问题不是MySQL服务器或配置文件,请尝试修复您的数据库。

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

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

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

在任何空线上,粘贴下列内容:

1[label wp-config.php]
2define('WP_ALLOW_REPAIR', true);

这定义了WordPress在确定是否应该启用修复功能时寻找的变量。

保存和关闭文件. 切换到您的浏览器并加载以下地址,确保您将网站的域名或IP地址替换为突出部分:

1http://www.example.com/wp-admin/maint/repair.php

一个数据库修复页面将加载:

WordPress database repair page

点击修复数据库按钮,您将被带到一个结果页面,在那里您可以实时查看正在进行的检查和修复:

WordPress database repair results page

一旦过程结束,请确保再次打开wp-config.php文件,并删除我们刚刚粘贴的行。

您是否注意到正在进行的任何修复? 再次尝试您的网站,并检查错误是否消失. 如果发现了无法修复的问题,您可能需要从备份中恢复数据库,如果您有一个可用。 请参阅我们的教程 如何在MySQL中导入和导出数据库 有关如何做到这一点的详细信息。

如果没有发现数据库的问题,那么我们仍然没有发现这个问题. 它可能是我们刚刚错过的间歇性问题,或者更模糊的东西。

结论

大多数错误建立数据库连接的问题应该是通过上述三步解决的. 然而,可能会有更多令人难以置信的问题继续以这种方式呈现。

Published At
Categories with 技术
Tagged with
comments powered by Disqus