介绍
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
一个数据库修复页面将加载:
点击修复数据库
按钮,您将被带到一个结果页面,在那里您可以实时查看正在进行的检查和修复:
一旦过程结束,请确保再次打开wp-config.php文件,并删除我们刚刚粘贴的行。
您是否注意到正在进行的任何修复? 再次尝试您的网站,并检查错误是否消失. 如果发现了无法修复的问题,您可能需要从备份中恢复数据库,如果您有一个可用。 请参阅我们的教程 如何在MySQL中导入和导出数据库 有关如何做到这一点的详细信息。
如果没有发现数据库的问题,那么我们仍然没有发现这个问题. 它可能是我们刚刚错过的间歇性问题,或者更模糊的东西。
结论
大多数错误建立数据库连接
的问题应该是通过上述三步解决的. 然而,可能会有更多令人难以置信的问题继续以这种方式呈现。
- 高流量(因此性能和错误)的常见来源是WordPress安装中常见的暴力攻击,您可以通过遵循
如何保护WordPress免受XML-RPC攻击
(How To Protect WordPress from XML-RPC Attacks)(https://andsky.com/tech/tutorials/how-to-protect-wordpress-from-xml-rpc-attacks-on-ubuntu-14-04)来抵消攻击。 *您可以通过在WordPress安装中实施缓存来节省一些服务器资源。 对于WordPress有许多简单的缓存插件。 我们的教程, How To Configure Redis Caching to Speed Up WordPress将向您展示如何配置特别高性能的Redis支持的缓存。