打开WordPress出现“error establishing a database connection”错误如何解决

今天打开一个客户的服务器,系统linux的,然后就出现了“error establishing a database connection”这其实就是连接数据库错误,可是找了很久也没发现啥,一切都是正常的很是郁闷,最后处理的方式多重启了几次系统就好了,一直也没想出啥问题;

最简单的方法就是重启服务器或者用service mysqld restart命令(MySQL数据库)或者systemctl restart mariadb.service命令(MariaDB数据库)可以暂时解决问题,过一段时间还会出现。
再次分析原因可能是Apache2占用内存过高,MySQL/MariaDB运行一段时间后会自动退出所致,解决方法:

1、将Apache2换成Nginx或其他轻量级Web服务器。
2、不想更换Apache2的可以增大服务器物理内存或添加Swap交换文件。
3、不想更换Apache2也不想增加服务器物理内存,且网站访问量不大,可以尝试修改Apache2配置文件(文件路径/etc/httpd/conf/httpd.conf)。Apache2目前有三种稳定的MPM(Multi-Processing Module,多进程处理模块)模式,分别是prefork,worker和event。(查看Apache2的MPM模式,可以使用httpd -V命令。)
编辑/etc/httpd/conf/httpd.conf文件,添加下面内容:

<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 100
MaxRequestWorkers 100
MaxConnectionsPerChild 2000
</IfModule>

说明:

<IfModule mpm_prefork_module>
StartServers 5 #推荐设置:小=默认 中=20~50 大=50~100
MinSpareServers 5 #推荐设置:与StartServers保持一致
MaxSpareServers 10 #推荐设置:小=20 中=30~80 大=80~120
ServerLimit 150 #推荐设置:小=500 中=500~1500 大型=1500~3000
MaxRequestWorkers 150 #推荐设置:小=500 中=500~1500 大型=1500~3000
MaxRequestsPerChild 0 #推荐设置:小=10000 中或大=10000~500000
</IfModule>

注:在Apache2.3.13以前的版本MaxRequestWorkers被称为MaxClients。此外,设置ServerLimit参数最好与MaxRequestWorkers的值保持一致。
恩,貌似还没有解决我的问题,那么,我们使用WordPress提供的调试机制来看看到底是哪里有问题吧!
首先应该做的是确保在站点的前端和站点的后端(wp-admin)上都得到相同的错误。如果错误消息在两个页面上都相同“建立数据库连接时出错”。我们可以按照下面的步骤执行。
在wp-config.php文件中添加以下代码:

define('WP_ALLOW_REPAIR', true);

保存以后,我们执行下面的url来访问:
http://域名/wp-admin/maint/repair.php
访问该URL的主要功能是用来修复损坏的数据库。修改完成后,我们需要从wp-config.php文件中删除上面添加的代码。
如果您更改了root密码或数据库用户密码,那么您还需要更改此文件wp-config.php。确保配置的数据库的用户名和密码都正确。

define('DB_NAME''数据库名')
define('DB_USER''数据库用户名')
define('DB_PASSWORD''数据库密码')
define('DB_HOST''主机');

注意在输入以上信息时不要输错。另外当我们的网站流量过大时,也会出现数据库连接错误。
如果同一个服务器上有多个服务,可以访问其他服务看看是否正常,判断是不是数据库服务器导致的。
网上的方法,第一种:看你的VPS控制面板(一般宝塔或者wdcp)能不能连上,如果你的控制面板连不上的话那就说明是你的vps中的mysql服务没有启动,所以这个时候你需要启动你的mysql服务即可。
启动服务如下service mysqld startservice pureftpd startservice wdapache startservice httpd startservice nginxd start
第二种:磁盘空间可能满了
是的,你的vps磁盘空间满了,也会导致mysql服务启动不起来,这个时候需要清理一下你的vps硬盘。
在wdcp里面你可以看到磁盘的数据使用量,用putty连接你的VPS也是可以查看的。
这个问题是我亲自遇到的。

另外还需要判断,你所使用的用户的权限是否足够。还有是否设置了拒绝远程连接。
最后,请注意任何操作数据库前,请注意备份,以免发生意外。
第三种:控制面板可以打开,只是一个网站的数据库连接不上
那么这个情况绝大多数都是因为你的这个网站的mysql数据库里面有一张数据表出了问题。
这个时候你需要登录你的控制面板,进入到phpmyadmin里面,找到你的数据库,查看你那个数据库里面是不是有一张表处于“使用中”状态。
选中这样表进行修复即可,你的网站就会恢复正常。

用PHPADMIN修复
domain/phpmyadmin/
发现,这个表确实崩溃了,但不能修复,因为没提供修复选项,而其他正常的表却提供了修复选项,真不知道是什么逻辑。

看来,也只能找其他的修复方法了。
最终,找到一个可行的方法

以下是参照资料

# mysql -u root -p
Enter password:

mysql> use wordpress;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from wp_posts;
ERROR 145 (HY000): Table './wordpress/wp_posts' is marked as crashed and should be repaired
mysql> Bye

修复 MySQL 数据库数据表问题可以由 mysqlcheck 来解决,先用 mysqlcheck 查看一下:

# mysqlcheck -u root -p wordpress
Enter password:
然后添加 –auto-repair 参数自动修复,最好修复前备份一下数据库:

# mysqldump -u root -p wordpress > wordpress.sql
Enter password:

# mysqlcheck -u root -p wordpress --auto-repair
Enter password:
wordpress.wp_commentmeta
error : Table upgrade required. Please do "REPAIR TABLE `wp_commentmeta`" or dump/reload to fix it!
wordpress.wp_comments
error : Table upgrade required. Please do "REPAIR TABLE `wp_comments`" or dump/reload to fix it!
wordpress.wp_links
error : Table upgrade required. Please do "REPAIR TABLE `wp_links`" or dump/reload to fix it!
wordpress.wp_options
error : Table upgrade required. Please do "REPAIR TABLE `wp_options`" or dump/reload to fix it!
wordpress.wp_postmeta
error : Table upgrade required. Please do "REPAIR TABLE `wp_postmeta`" or dump/reload to fix it!
wordpress.wp_posts
error : Table upgrade required. Please do "REPAIR TABLE `wp_posts`" or dump/reload to fix it!
wordpress.wp_term_relationships OK
wordpress.wp_term_taxonomy
error : Table upgrade required. Please do "REPAIR TABLE `wp_term_taxonomy`" or dump/reload to fix it!
wordpress.wp_terms
error : Table upgrade required. Please do "REPAIR TABLE `wp_terms`" or dump/reload to fix it!
wordpress.wp_usermeta
error : Table upgrade required. Please do "REPAIR TABLE `wp_usermeta`" or dump/reload to fix it!
wordpress.wp_users
error : Table upgrade required. Please do "REPAIR TABLE `wp_users`" or dump/reload to fix it!

Repairing tables
wordpress.wp_commentmeta OK
wordpress.wp_comments OK
wordpress.wp_links OK
wordpress.wp_options OK
wordpress.wp_postmeta OK
wordpress.wp_posts OK
wordpress.wp_term_taxonomy OK
wordpress.wp_terms OK
wordpress.wp_usermeta OK
wordpress.wp_users OK

mysql 服务设置不当,导致 mysql 连接数量超过限定值,或者应用程序设计有问题,导致大量休眠连接不能及时释放。

mysql -u root -p

执行指令

show processlist;

查看当前连接数量。
如果进程过多,或存在大量超时的休眠 sleep 连接,编辑/etc/mysql/my.cnf

vim /etc/mysql/my.cnf

在[mysqld]字段处,添加,或去掉注释

max_connections = 500 #增加 mysql 连接数
wait_timeout = 10 #断开超过 10 秒的连接

所写所说,是心之所感,思之所悟,行之所得;文当无敷衍,落笔求简洁。 以所舍,求所获;有所依,方所成!

更多请关注:老梁`s Blog

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。 您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可->联系老梁投诉资源
Laoliang.Net资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:service@laoliang.net
老梁`s Blog(老梁博客) » 打开WordPress出现“error establishing a database connection”错误如何解决

发表评论

本站承接,网站推广(SEM,SEO),软件的安装的安装与调试,服务器的推荐以及配置,APP的开发与维护,网络或者web维护;财务软件,客户管理系统,人力资源,超市POS,医药管理,服务器安全,ecshop,金蝶,用友,管家婆;

立即查看 了解详情