WordPress出现“Error establishing a database connection”解决办法

今天在访问可爱淘(keaitao.net)的时候出现“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服务器

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秒的连接

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

修复办法参考上面!

参考文档:

站长百科 Error establishing a database connection

关于最近Error establishing a database connection的问题

烦人的Error establishing a database connection!

已解決error establishing a database connection

Error establishing a database connection的解决方法

修改WP默认的语言声明为“zh-CN”

WordPress默认的语言声明为空,源码里显示的为:

dir=”ltr” lang=”en-US”

若要修改为其他语言声明比如中文简体,可以打开wp-config.php文件,修改“WPLANG”的参数即可。如下:
define (‘WPLANG’, ‘zh-CN’);

附注,HTML lang属性:
lang 属性 — HTML语言声明属性

如果网页定义为XHTML1.1或者XML格式,那么可以使用xml:lang属性(因为xml:lang属性是在XML中确定语言信息的标准用法).
如果网页使用HTML格式,那么应该同时使用xml:lang和lang属性.

参考:HTML lang属性

关于WP禁用自动保存的设置参考参数:WP_POST_REVISIONS

WordPress 搜索引擎优化:启用 Gzip 压缩编码

Google已经把网站速度加入搜索引擎排名因素之一,如果你的WP载入速度缓慢,可以考虑启用Gzip压缩编码和缓存你的Wordpress,从而提高网站整体加载时间。

面对Wordpress丰富的插件来说,启用Gzip与进行缓存,都是非常容易的事,这里就不说了。。

通过“.htaccess”来实施启用Gzip压缩编码的方法:

主要对文本类型比如HTML、CSS和JavaScript进行压缩(不会压缩图片)。
在你的“.htaccess”中添加以下“代码”就可以了(注意格式,偶没有使用code插件,所以下面代码的一些语句需要自行修改下的,半角和全角。。)

#Gzip by clin003.com
< ifmodule mod_deflate.c >
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript
< /ifmodule >
#End Gzip by clin003.com

通过php语句启用 Gzip压缩编码的方法(针对Wp的修改):

1、下载你的wp首页文件index.php。
2、可以看到大部分为注释,其实只有两行代码。
3、在第一行(紧挨着 ?php 写即可)添加以下语句即可。

ob_start(“ob_gzhandler”);

添加后的效果类似这样的:

ob_start(“ob_gzhandler”);
/**
* Front to the WordPress application. This file doesn’t do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
*
* @package WordPress
*/

3、上传覆盖原来的index.php即可。
4、可以通过gzip验证工具检测下压缩效果。。当然也可以使用“Live HTTP headers”来查看加载前后的信息(目前我这个blog:clin003.com的压缩比达到+68%,压缩前的大小为 42,423 bytes,压缩后为 13,029 bytes ,当然这个随着日志更新应该会不一样的 )。

让WordPress登录过程加密(使用HTTPS协议)

修改“wp-config.php”,添加两行定义就可以了(如下,可参考注释位置):

define(‘FORCE_SSL_ADMIN’, true);
define(‘FORCE_SSL_LOGIN’, true);
/* That’s all, stop editing! Happy blogging.

这样就可以使用HTTPS协议登录WP后台了。

这两个参数一个是用来加密登录的一个是后台管理加密访问的(若使用http协议访问,会自动转换为https协议访问)。

关于这两个配置参数的详细说明可参考官方文档

如果你的WP版本低于2.6,还想用加密地址登录,可考虑升级WP到最新版本即可。。

WordPress 2.6 and later has greatly improved support for administration over SSL out of the box.

To easily enable (and enforce) administration over SSL, there are two constants that you can define in your blog’s wp-config.php file. It is not sufficient to define these constants in a plugin file; they must be defined in your wp-config.php file.

推荐WordPress插件:wp-gfc FriendConnect plugin for WordPress

今天给一个新的WP站添加“Google Friend Connect”,由于GF*的作用,基本是点一下断一会,而且找不到下载 canvas.html 和 rpc_relay.html 的链接(我把这个blog里的这俩文件传上去,生成的代码貌似还不能用)!

看到“Plug-ins & APIs”下有WP的评论插件:wp-gfc
于是下载,解压,上传。。有几个文件怎么也传不上去(可能是空间商屏蔽了这几个名字,偶没有改名上传然后改回来。。)!

只好借助Putty通过SSH连接上去:

[clin003@hostxx plugins]$ cd ~/wp-content/plugins

[clin003@hostxx plugins]$ wget
http://wp-gfc.googlecode.com/files/googlefriendconnect1.1.5.zip

[clin003@hostxx plugins]$ unzip googlefriendconnect1.1.5.zip

然后进入WP控制面板,激活“googlefriendconnect”插件,setting,填入网站在google friend connect中的id(这个ID可以在“google friend connect”中设置网站的时候从网址链接中获取),勾选下功能即可使用了(目前能用的功能有:代替WP评论、顶部或底部状态栏、推荐按钮)。

使用google friend connect登录后,会自动在网站中创建一串数字为用户名的用户!可以(在WP控制面板)自行设置用户信息(不过这个跟是否使用google friend connect的评论功能有关,同一个登录用户ID是唯一的一串数字,无论是否曾经加入与退出)。

设置好默认用户权限o(默认为订阅用户级别)。

PS: 到后台Widgets里可以看到更多的 FriendConnect 插件呢!

今日杂碎:又改一套WP模板

是从安装包带的 “classic” 模板修改的。
真是赞叹“classic”的简洁,很容易就复制出一份自己的板子了(默认所有的页面都是用index.php的模板)。

比如
1、自定义添加一个404 页面,可以复制index.php为404.php。然后修改里面内容。
2、添加一个Page页面默认模板,可以复制index.php为page.php。然后修改。。
。。
另外单页面post的默认模板文件为 single.php;存档页面的模板文件名为 archive.php;

改的时候遇到一个很纠结的问题,就是ie里的height和min-height(貌似ie不认min-height),还有就是ie中的margin,顶起来的高度显示不出来!只好弄几个换行标签上去充当。。

PS:先前改得模板感觉也挺好的,只是在页脚都硬性插入了“公司信息”,也不方便拿出来分享了(先前的都是从知名的框架模板改来得)。