can not connect to mysql server翻译_Message:Can not connect to MySQL server的解决办法

问题:后台内容进行全部整体更新的时候会出现此错误 can not connect to mysql server

部分更新的时候不会出错;

判断:mysql服务器在程序连接时出现问题,请求数量过大,服务器承担不起;

解决:将配置文件中改为持久连接

注:

wmxx_cn:

phpcms/include/config.inc.php

define('DB_PCONNECT', 0); //0 或1,是否使用持久连接

=================以下为第二种解决方案=======================================================================================

Can not connect to MySQL server 的解决方案。

问题表现:

Can not connect to MySQL server

Can't connect to MySQL server on 'xxx.xxx.xxx.xxx' (4)

这个问题困扰很长一段时间了,google baidu 都找不到原因,今天沉下心来好好的思考了一翻,有点头绪。

通过 netstat -an 命令,发现在MySQL服务器上产生了大量的 WAIT_CLOSED | ESTABLISHED off 状态的链接。 是突然产生的,没有任何征兆。

因为web 服务器跑的是 fast-cgi php ,fast-cgi php 跟模块化的php不同的是,为了节省资源,fastcgi进程会管理mysql连接资源,fastcgi会与mysql产生一个持久连接,不会在一个php会话结束的时候释放mysql连接,而是将这个链接保存到“连接池”中,在下一个会话到来的时候,直接使用这个链接。

所以经过我初步判断,是连接超时引起的,我所有使用的mysqld 版本是 icc-5.1.39/40 (这两个版本都有这个问题)。尝试修改 /etc/my.cnf,

[mysqld]

wait_timeout = 96400

interactive_timeout=96400 # 这个必须要加上,否则show variables like '%timeout%' 会发现 wait_timeout 一直是 28800

# 96400 是一天的秒数+10000,因为我的mysql服务器每天会有一次冷备份,也就是会重启一次,所以设置的是这个数值。可以设置的更大一些,比如 86400000

接下来重启 mysqld。

应该可以了,观察中。

=================================

2009-12-11 接上面

很不幸,那个问题依然存在,根据朋友的提示做了以下工作:

1. yum update

2. 更新 libevent 库到最新的版本

问题依然存在!

后来查看系统日志 tail -n 1000 /var/log/message 发现有部分 can't open file 'bbs_post.MYD#' 类的字样,还有系统文件数打开数达到上限的提示,突然想到, 可能是MYSQL分区引起的文件打开数过多!

这与之前的一个方案有关系,经过测试,每个表的记录数在50w的时候,根据主键查询速度很快,达到 100w PV 的时候,会下降5-8倍,500w+ 时,根据主键查询一条需要 0.3s 左右(1U 4核 4G 普通服务器)。所以在分区的时候我分的比较小,50W一个区,结果产生了大量的分区文件。而MYSQL在运行时都是打开状态的,所以文件打开数达到了上限,通过 lsof -p 123|wc -l (123 为mysqld pid)可以知道mysqld打开文件数。做如下调整:

做了一个php脚本优化/修复了一下表:

脚本 /root/optimizer_table.php 如下:

$dbhost = '192.168.1.1';

$dbuser = 'dbuser';

$dbpw = 'dbpw';

$dbname = 'test';

system("service nginx stop");

set_time_limit(0);

$db = mysql_connect($dbhost, $dbuser, $dbpw);

mysql_select_db($dbname);

$query = mysql_query('show tables');

while($row = mysql_fetch_assoc($query)){

$tablename = $row['Tables_in_'.$dbname];

mysql_query("optimize table $tablename");

}

system("service nginx start");

?>

执行: /usr/local/php/bin/php-cgi /root/optimizer_table.php

ulimit -HSn 65536

另外有可能是PHP的EA加速造成,关闭PHP EA加速。

问题到此解决,到底是mysql分区导致打开文件过多,还是EA,我没有时间去深究,有兴趣的朋友可以试一下,记录下解决过程,供大家参考。

==============第三种解决方案==========================

这个是一个连接错误,意思就是告诉你,现在你的MYSQL服务器连接数量已经太多,无法建立新的连接了。

因为mysql默认是100个连接,你要是作为第101个用户去访问,去连接,显然就报错了。

你得修改max_connections,自己去改大一点吧。

更多参考教程《提示Can not connect to MySQL server的原因》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值