在日常浏览网页的时候,肯定会遇到很多网页错误问题。Error Establishing a Database Connection(建立数据库连接时出错)就是经常会遇见的,产生这种错误的原因也有很多。作为一个初涉 WordPress 的朋友来说,在自己没有进行任何修改就发生这种错误是非常让人头疼的。昨天我们的网站就发生了这种问题,花费了我二十分钟来分析和解决这个问题。我们也在网络上进行了大量的搜索,可是也没有发现关于这方面有分析比较全面的文章。在这篇文章中,我们将介绍所有导致 Error Establishing a Database Connection(建立数据库连接时出错)问题的原因和解决方法。
注意:在你进行任何数据库操作之前,确保已经对相关数据库进行过备份!
为什么会产生这种错误?
在很长一段时间内,发生这种错误的原因就仅仅是 WordPress 无法连接数据库而已。而如今,导致发生这种错误的原因就已经多种多样了。可能是数据库登录凭证出错或者被更改;可能是数据库服务器反应迟钝;也可能是你的数据库已经损坏。在我们的经验中,发生这种错误,多数情况下是有些类型的服务器错误,但也有可能是其他错误。让我们一起来看一下怎么解决这个问题。
问题是不是只出现在 /wp-admin/ 目录?
你需要做的第一件事就是确认这个问题是不是同时发生在网站前端和网站后台(wp-admin)。如果错误提示 “Error establishing a database connection” 同样出现在网站前端,那就跳转到下一步。如果在网站后台(wp-admin)出现了与上面不同的类似 “One or more database tables are unavailable. The database may need to be repaired” 的错误提示,那接下来就需要修复你的数据库。
在修复之前,需要将下面的一句代码加到 wp-config.php 中。(加到 wp-config.php 中的 “That’s all, stop editing! Happy blogging” 这句话之前)
define('WP_ALLOW_REPAIR', true);
加入上述代码之后,你就会发现可以通过访问如下网址来设置“修复”或者“修复和整理”数据库。
http://www.yoursite.com/wp-admin/maint/repair.php
需要注意的一点是,用户不需要登陆就可以进行数据库的修复工作。那是因为既然需要修复数据库,肯定用户就无法登陆了,所以在修复数据库的时候就采用这种不需要登陆的设置。一旦你修复或者整理好了你的数据库,千万记得把上边加入的代码从 wp-config.php 中移除。
如果修复操作无法解决你的问题,或者你在进行修复的过程中又碰到新问题,继续看下面的内容,你能找到另外的解决方法。
检查 WP-Config 文件
wp-config.php 是在整个 WordPress 安装过程中最重要的一个文件。在其中你可以具体设置 wordpress 连接数据库的信息。如果你重置了 root 密码或者数据库用户密码,你需要再编辑一次这个文件。首先你要做的就是再三检查 wp-config.php 中是否一切正常。
define('DB_NAME', 'database-name');
define('DB_USER', 'database-username');
define('DB_PASSWORD', 'database-password');
define('DB_HOST', 'localhost');
记住,你的 DB_HOST 可能不是 localhost。不同的服务器,会有不同。比较常见的主机名有 HostGator、BlueHost、Site5、localhost 或者其他。
有些人建议通过把 localhost 换成 IP 来解决这个问题。在本地环境配置 WordPress 时常见这种解决方法。例如在 WAMP 环境下,把 DB_HOST 的值换成 IP 地址似乎有效果。
define('DB_HOST', '127.0.0.1:8889');
但是设置成 IP,在联网的反应会比较迟钝。
如果,你已经将这个文件彻底检查了(确保你把错别字也考虑了)。如果问题还存在,就基本可以确定是在服务器上有些问题了。
检查服务器(MySQL 服务器)
如果当你的网站有相对比较大的进站流量时经常会提示 “Error establishing a database connection”,基本上来说,就是你的服务器无法承受这么大的进站流量,特别是对于文件托管在共享主机或者配置比较低的 VPS 上的更是如此。你的网站会因此访问速度满,也常会有用户反映出现数据库问题。此时,最好的解决方式就是和你的服务器提供商打电话或者在线交流,确保你的服务器足够敏捷来应对网站访问。
当然,你可以通过进行一些操作来自行测试你的 MySQL 服务器处理请求的能力。观察使用同样配置服务器的其他网站是否也存在同样问题。如果其他使用同样配置服务器的人也遇到了同样的问题,很大程度上就可以确定是你的 MySQL 服务器有些问题。尝试连接 phpMyAdmin 看看是不是能连通,如果可以连通,我们就需要来验证你的数据库用户是否有足够的权限。创建一个文件,名为 testconnection.php,并且把下面的代码粘贴在其中。
<?php
$link = mysql_connect('localhost', 'root', 'password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
echo '验证成功';
mysql_close($link);
?>
将用户名和密码替换成要验证的。如果输出“验证成功”,则你的数据库用户具有足够的权限,否则就没有足够权限。回到 wp-config.php 确保一切正确,包括拼写。
如果通过连接 phpMyAdmin 也无法连接到数据库,这样就确定你的 MySQL 服务器有问题了,也并不是说整个服务器有问题,可能只是说数据库用户没有足够权限。
对于我们的情况,我们的 MySQL 服务器运行良好。所有服务器上的网站均运行状态良好尤其是 Mr.Hsu。但是当我们连接 phpMyAdmin 时,收到了这样的错误代码:
#1045 – Access denied for user ‘foo’@’%’ (using password: YES)
我们马上和主机商取得了联系,客服也很快找到了问题所在。我们的用户的权限重置了。我们也不知道怎么发生的,显然确实有问题,并且也被客服解决了。我们获得了足够的权限,也就能够登陆网站后台了。所以你要是发现连接 phpMyAdmin 失败或者 testconnection.php 结果显示验证失败,你需要及时的联系你的主机商,详细告诉他们错误代码和信息,他们会很快解决的。
其他有效的解决方法
或许这些方法并不适用于你,但是也非常重要可以记下来。一定要确保做了足够的备份以防止特殊情况的发生。
Deepak Mittal(http://www.absolutelytech.com)的网站同样遇到了这个问题需要修复数据库。但是即使是修复了数据库之后,这个问题依然存在。他尝试了各种各样的处理方法,最后原来是网站 URL 导致的。他在 phpMyAdmin 中运行了以下命令:
UPDATE wp_options SET option_value='YOUR_SITE_URL' WHERE option_name='siteurl'
将 YOUR_SITE_URL 换成你的网站的 URL,例如:https://mrhsu.com。如果你曾经改变过 WordPress 数据库的前缀(默认为 wp_),wp_options 也会变得不一样。这种方法显然对于他的情况来看有效果,他网站下面的评论中也不乏成功解决问题的人。
Sachinum(https://profiles.wordpress.org/sachinum) 同样可以通过 testconnection.php 连接到数据库,他建议把 wp-config.php 中的用户换成 root 用户。Wordpress 刚开始运行良好,随后他把用户从 root 又换成之前的数据库用户,这时候网站仍然运行良好。他也说不出到底是哪里错了,可问题就这样得到了解决。
还有很多人只不过是上传了之前的一个 WordPress 备份,就解决了这个问题。产生这个问题的原因很多,你有没有遇到过并且成功解决了?我们会尽可能扩展本篇文章,省得那么多朋友再浪费不必要的时间来搜索答案。