mysql error Too many connections
今天中午,监控说有台mysql服务器连不上,登陆检查:
mysqladmin -u -p processlist
mysqladmin: connect to server at 'localhost' failed
error: 'Too many connections'
同时,发现3306端口有很多连接:
netstat -anp
tcp 0 0 1.1.1.2:3306 1.1.1.52:42886 ESTABLISHED -
tcp 0 0 1.1.1.2:3306 1.1.1.52:42887 ESTABLISHED -
tcp 0 0 1.1.1.2:3306 1.1.1.52:42884 ESTABLISHED -
tcp 0 0 1.1.1.2:3306 1.1.1.1:40008 ESTABLISHED -
tcp 0 0 1.1.1.2:3306 1.1.1.57:39863 TIME_WAIT -
tcp 0 0 1.1.1.2:3306 1.1.1.57:39862 TIME_WAIT -
tcp 0 0 1.1.1.2:3306 1.1.1.57:39861 TIME_WAIT -
tcp 0 0 1.1.1.2:3306 1.1.1.57:39860 TIME_WAIT -
tcp 0 0 1.1.1.2:3306 1.1.1.57:39859 TIME_WAIT -
tcp 0 0 1.1.1.2:3306 1.1.1.57:39858 TIME_WAIT -
tcp 0 0 1.1.1.2:3306 1.1.1.57:39857 TIME_WAIT -
tcp 0 0 1.1.1.2:3306 1.1.1.57:39856 TIME_WAIT -
tcp 0 0 1.1.1.2:3306 1.1.1.57:39871 TIME_WAIT -
如果是oracle ,ps -ef 可以找到一个(LOCAL=NO)的进程,然后,kill -9,但是mysql 是多线程服务器,
只有一个通过mysqld_safe启动的mysqld进程。因为时间紧迫,只能kill 了上述两个进程。
然后通知开发控制每台机器的连接数,调整应用,同时也调整了最大连接数
网上找到一个处理的文章:
MySQL: Too many connections
2010-09-28 | 07:10分类:MySQL | 标签:MySQL | 1,654 views
$mysql -uroot
ERROR 1040 (00000): Too many connections
上面的错误,估计很多人都遇到过,Aurimas Mikalauskas在MySQL Performance Blog已经提到了一个解决办法(生产环境慎用之):
$gdb -p $(cat data/mysql_sandbox5087.pid) \
-ex "set max_connections=5000" -batch
上面提到的只是一个救火的办法,MySQL提供了另一个办法,可以一定程度上避免上述问题。
MySQL提供了参数max_connections控制最大连接数,这包括所有用户的连接数。MySQL还提供了另一个参数max_user_connections,用来控制某个用户的最大连接数。例如,将该参数设置为50,那么对于任何一个用户(包括super权限的用户),最多只能创建50个连接。
于是我们可以制定下面的策略:如果的MySQL有3个用户(不包括root),将max_user_connections设置为300,max_connections设置为1000。配置文件:
max_connections = 1000
max_user_connections=300
那么因为只有3个用户,单个用户的最大连接数是300,那么正常最多就只有900个连接,也就总会有100个额外的连接给root来使用。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/758322/viewspace-700127/,如需转载,请注明出处,否则将追究法律责任。