如何修复WordPress中的Error Establishing a Database Connection(建立数据库连接时出错)的错误

上了这么多年的网,你可能也已经见过很多次这种错误了。Error Establishing a Database Connection也是可能会由多种原因引起的问题之一。作为一个WP小白,如果自己没有对网站做任何修改的情况下出现这个问题真的是让人非常头疼的一件事。昨天我们的另一个网站也遇到了这个问题,我们花了20多分钟去排查问题并修复了问题。在调查可能引起问题的原因时,我们意识到没有一篇文章能够全面的覆盖所有的原因。在这篇文章中,我们将众多的解决方案整合到一起来向大家教大家如何解决WordPress中的Error Establishing a Database Connection的问题。

注意:在你对数据库操作之前,一定要确保你已经对数据库做了备份!

为什么会出现这个错误提示?

简单说,就是因为WordPress无法与数据库建立连接了。至于为什么无法连接数据库,那原因就会有很多了。可能是数据库的登录凭据错误或者被修改了,也可能是数据库服务器没有响应,还可能是数据库崩溃了。根据我们的经验来看,引起这个问题的大部分原因是服务器的某些错误,当然也可能会有一些其他的因素。我们一起来看看如何排除这个问题。

/wp-admin/也会出现这样的问题吗?

首先你要先确定在前端和后端(wp-admin)遇到的问题是一样的。如果错误信息都是“Error establishing a database connection”(建立数据库连接时出错),那么进行下一步。如果你在后台看到的错误提示是“One or more database tables are unavailable. The database may need to be repaired”,那么就需要对数据库进行修复。

你可以在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.php中删除。

如果修复数据库的操作无法解决你的问题,或者在运行修复数据库的过程中遇到了新问题,那么请继续往下看,下面的解决方法可能会帮到你。

检查wp-config文件

在整个WordPress安装程序中,wp-config.php可能是最重要的一个文件了。这个文件详细记录了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,也可能是远程数据库。对于大多数的主机来说一般都是localhost。

有些人会建议将localhost改成IP来修复这个问题,一般用替换IP的办法修复的都是运行在本地环境的WordPress,例如MAMP,将DB_Host值替换成IP可能会管用。

define('DB_HOST', '127.0.0.1:8889');

在线主机的IP地址就不是127.0.0.1了,你可以添加公网IP。

如果文件中所有的东西都没有问题(确保你也检查了拼写错误),那就可以判断是服务器端的问题。

检查Web主机(MySQL服务器)

通常当你的网站突然涌入大量的流量时,经常会出现数据库连接错误的提示。简单来说,就是你的服务器无法处理负载(尤其是你的网站使用的是共享主机)。网站会变的很慢,部分用户那里甚至还会输入错误提示。那么最重要的首先要做的事就是给你的主机服务商打电话或在线沟通,询问他们你的MySQL服务器是否还有响应。

如果想自己测试MySQL服务器是否在运行,你可以试试这些方法。测试在同一台服务器上的其他网站,看看其他网站是否有问题。如果其他网站也出现了相同的问题,那就可以肯定是MySQL服务器出现了问题。如果你在这个服务器上没有其他的网站,那就前往cPanel尝试通过phpMyAdmin登录连接数据库。如果你可以连上,那我们需要验证你的数据库用户是否有足够的权限。新建一个testconnection.php的文件,然后将下面的代码拷贝进去:

<?php $link = mysqli_connect('localhost', 'username', 'password'); 
  if (!$link) { die('Could not connect: ' . mysqli_error()); 
    } 
  echo 'Connected successfully'; mysqli_close($link); 
?>

记得将上面代码中的username和password替换成你自己的。如果这个脚本连接成功了,就代表你有足够的权限,肯定是还有其他地方出错了。回到wp-config.php再次检查确认所有内容都准确无误,再次检查拼写是否有误。

如果你无法通过phpMyAdmin连接到数据库,那就说明是服务器出现了问题。服务器出问题并不一定意味着是MySQL服务器挂了,也可能是你没有足够的权限。

在我们的案例中,我们的MySQL服务器是正常运行的。除了出问题的网站,其他的网站也都正常运行。当我们尝试用phpMyAdmin连接数据库是,得到了如下的错误信息:

#1045 – Access denied for user ‘foo’@’%’ (using password: YES)

我们给主机服务商打了电话,他们很快就定位了问题。不知道什么原因我们的用户权限被重置了。不太清楚为什么会发生这样的事情,但很明显这就是问题所在。他们帮我们把账号的权限恢复了以后,网站就可以正常打开了。

所以不管你是使用phpMyAdmin还是testconnection.php,如果返回的是连接被拒绝的错误提示,那就应该立刻给主机服务商打电话,让他们帮你修复。

一些其他的有用的解决方案

重要提示:以下这些方法可能对你来说不管用,使用有风险。确保你在操作前做了备份。

一位用户反馈说,他的客户看到的错误信息是数据库需要修复。但是就算修复了数据库,错误信息依然还是出现。他尝试了各种方法,最后发现问题出在site_url上。很明显是因为siteurl被更改导致不停的报错,所以他在phpMyAdmin里运行了下面的SQL语句:

UPDATE wp_options SET option_value='YOUR_SITE_URL' WHERE option_name='siteurl'

记得把上面的 YOUR_SITE_URL 替换成实际的url,例如:https://www.wpxiaobai.cn。如果你修改过默认的数据库前缀,那么wp_options也需要改成 [自定义前缀_]options。

另一位用户反馈说,他使用testconnection.php可以连接到数据库,所以他把wp-config.php里的用户改成了root用户,网站就可以正常访问了。然后他又把root用户改回了数据库用户,网站仍然可以正常访问。他也不太确定是什么情况,不过感觉可能是拼写的问题。

还有一位用户说,他们把wp_options表里active_plugins的值删了,然后编辑了recently_edited的值。最终问题是解决了。

我们也了解到还有很多用户只是重新上传了一遍WordPress文件就解决了问题。

这确实是让人很郁闷的错误。你有用过什么方法来修复这个问题呢?欢迎在评论区分享,我们会将你的解决方法补充到文章里,让其他遇到这个问题的用户可以快速的找到解决方案。

为您推荐

发表回复

您的电子邮箱地址不会被公开。

1条评论