处理WordPress 出现“Error Establishing a Database Connection”

2018年6月24日14:51:41 发表评论 645 阅读
处理WordPress 出现“Error Establishing a Database Connection”错误的解决办法。处理WordPress 出现“Error Establishing a Database Connection”错误的解决办法。方法一、重新连接数据库。方法二、确定是否为mysql.sock问题。方法三。。。WordPress 建站的时候出现“无法连接数据库”的问题,下面我想分享解决问题的思路。
处理WordPress 出现“Error Establishing a Database Connection”

Error establishing a database connection

方法一、重新连接数据库

看起来意思就是数据库连接不上,引起的错误。

怎么样解决呢?

首先就要查看数据库连接的文件,WordPress配置数据库的文件是wp-config.php,就在WordPress的根目录下面。

找到下面这些:

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'mydb');
/** MySQL database username */
define('DB_USER', 'root');
/** MySQL database password */
define('DB_PASSWORD', '');
/** MySQL hostname */
define('DB_HOST', 'localhost');

DB_NAME为WordPress数据库的名称
DB_USER为MySQL数据库用户名
DB_PASSWORD为MySQL数据库密码
DB_HOST为MySQL主机名,一般默认localhost不用修改,特殊的可以修改成 localhost:3306/wordpress 这种形式。

方法二、确定是否为mysql.sock问题

1. 定位问题:获取更详细出错信息。如果还出现Error Establishing a Database Connection。

看到这个提示后,我们有多重假设,如果靠着我们的假设会花费大量的时间去试验,我的做法是:WordPress 是否有一种更详细显示出错信息的开关?在我寻找后,我发现,在wp-config.php中有一个可以修改为define('WP_DEBUG', true);

2. 分析问题:确定解决方案

打开DEBUG的开关后,发现问题是Can't connect to local MySQL server through socket '/var/run/mysqld/mysql.sock’

问题很明显是 PHP 无法通过默认的mysql.sock连接到 MySQL server。

确定 mysql.sock 的位置

使用指令 mysql -uroot -p 进入 MySQL; 使用指令 SHOW VARIABLES LIKE 'socket’;获取到 mysql.sock 的位置;

| socket | /tmp/mysql.sock |

3. 解决问题:用最简单好用的方法

一般出现上述问题有几种方法来解决:

(1)软连接到默认的 sock 位置 ln -s /tmp/mysql.sock /var/run/mysqld/mysql.sock

这是最简单最快的执行方法。

(2)修改 php.ini 中的 mysql.default_socket=tmp/mysql.sock

使用 php -i|grep php.ini找到 php.ini 的位置,然后修改,但是这种方法需要重启 Apache 或者 Nginx。

(3)直接修改 wp-config.php define('DB_HOST', 'localhost:/tmp/mysql.sock'); 在 WordPress 应用中配置 sock 的位置。

这种方法可以直接在应用层面修改,不涉及后台设置,如果没有太多权限,这是一种不错的方法。

最后使用的是方法(3),原因是朋友的后台账号没有足够的权限进行方法(1)和(2)的操作。

方法三、如果还是解决不了,就用以下办法

Error Establishing a Database Connection,但还是解决不了于是就有了下面的解决过程,WORDPRESS出现这种情况的原因可能是:

1、无法连接到Wordpress使用的数据库。

你的wp-config.php中的数据库用户名和密码错误,或者你的数据库所在服务器挂掉了!也有可能是服务商短时间内限制(访问量突然暴涨的博客或使用一些消耗数据库连接的WP插件)。

解决办法是,确认wp-config.php中的用户名和密码信息正确。确认WP使用的数据库服务器没有挂掉(可以ping或直接重启?!)。确认数据库连接方式,是远程连接还是本地连接,有些配置的远程连接的可能出现连不上数据库的情况,也就会出现这个“Error establishing a database connection”提示,一般虚拟空间(GD的空间使用的远程数据库连接)或合租空间都是使用的本地连接(localhost)。

2、若服务器数据库是刚刚升级到 mysql 5.0 以上,之前WP博客正常可访问。

这可能是由于mysql 5.0采用了一种新的密码验证机制,这需要客户端的版本要在4.0以上(PHP中的MYSQL客户端可以查看phpinfo得到),连接数据库时是用旧的密码机制,这会出现“Client does not support authentication protocol requested by server” 这样的错误提示,wordpress中就提示“Error establishing a database connection (可能密码错误)”。

解决办法:

方法1、在mysql中为wordpress数据库新建一个控制账户,然后修改wp-config.php中的数据库用户名和密码配置信息即可。方便简单!!

方法2、在mysql下:

代码如下

mysql> SET PASSWORD FOR
-> ‘clin003′@’clin003.com’ = OLD_PASSWORD(‘newpwd’);
mysql> FLUSH PRIVILEGES;

这里的clin003替换成使用wordpress数据库的用户名,clin003.com替换成localhost或者某个域名,newpwd是该用户对应的密码。

还有一点是,查看phpinfo(),找MYSQL_SOCKET显示的mysql.sock的路径,确认mysql.sock的确在此路径下,否则需要做一个符号链接。比如phpinfo里显示MYSQL_SOCKET路径为/var/lib/mysql/mysql.sock,但实际上位于 /tmp/mysql.sock,可在命令行输入:

代码如下

ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

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

登陆mysql服务器

查看当前连接数量,如果进程过多,或存在大量超时的休眠sleep连接,编辑

代码如下

mysql -u root -p

使用命令

show processlist;

 

代码如下

/etc/mysql/my.cnf
vim /etc/mysql/my.cnf

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

max_connections = 500 #增加mysql连接数

wait_timeout = 10 #断开超过10秒的连接

4、是wp_options数据库表错误,我把整个数据库表修复和优化了一次

wp_options中的表前缀wp根据自己实际情况查看!

WORDPRESS出现错误时,可以通过 DEBUG 参数调试:
根据Wp-config.php的调试功能排错

1、在 wp-config.php 有个 debug 的参数,打开这个参数,修改为:

define(‘WP_DEBUG’, ‘true’);

2、根据报错提示解决问题,比如以下错误:

WordPress database error: [Table './clin003_com/wp_options' is marked as crashed and should be repaired]
SELECT autoload FROM wp_options WHERE option_name = ‘_transient_doing_cron’
WordPress database error: [Table './clin003_com/wp_options' is marked as crashed and should be repaired]
SELECT autoload FROM wp_options WHERE option_name = ‘_transient_timeout_doing_cron’
WordPress database error: [Table './clin003_com/wp_options' is marked as crashed and should be repaired]
SELECT option_value FROM wp_options WHERE option_name = ‘_transient_doing_cron’ LIMIT 1

wp_options 表坏了,需要被修复,使用 mysql 客户端。
进 mysql 使用修复的命令修复:

代码如下

mysql>repair table wp_options;

也可以通过phpMyAdmin来进行修复。

3、问题解决,关掉 DEBUG。

根据mysql的日志记录排错

在mysql的log日志文件

代码如下

mysql/data/

里面找到一个.err结尾的文件,打开。看见了一排

‘.\clin003_com\wp_options’ is marked as crashed and should be repaired
‘.\clin003_com\wp_options’ is marked as crashed and should be repaired
‘.\clin003_com\wp_options’ is marked as crashed and should be repaired

修复办法参考上面!

hcyaobin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: