问题1: Too many connections
问题描述 :
项目中,mysql数据库在长时间使用的过程中,突然遇到 "Data source rejected establishment of connection, message from server: “Too many connections” .
产生原因:
当mysql的连接数达到上限值的时候,如果现有的连接没有关闭,则无法创建新的连接.
解决方案:
-
重启mysql服务.(当然不是最佳选择)
-
修改mysql的一些参数
1.修改最大连接数,(也并非最佳方案.)
show variables like “max_connections”;
set GLOBAL max_connections=1000;
2.set global interactive_timeout=500;修改这个数值,表示mysql在关闭一个连接之前要等待的秒数,至此可以让mysql自动关闭那些没用的连接,但要注意的是,正在使用的连接到了时间也会被关闭,因此这个时间值要合适.一般也不建议修改.
3.修改超时连接时间.最好控制在几分钟之内.如下设置为5分钟(推荐做法)
show global variables like ‘wait_timeout’;
set global wait_timeout=300;
总结:
(1) 睡眠连接过多,会对mysql服务器造成什么影响?
严重消耗mysql服务器资源(主要是cpu, 内存),并可能导致mysql崩溃。
(2) 造成睡眠连接过多的原因?
1. 使用了太多持久连接(个人觉得,在高并发系统中,不适合使用持久连接)
2. 程序中,没有及时关闭mysql连接
3. 数据库查询不够优化,过度耗时。(3)当然,更根本的方法,还是从以上三点排查之:
1. 程序中,不使用持久连接,即使用mysql_connect而不是pconnect。
2. 程序执行完毕,应该显式调用mysql_close
3. 逐步分析系统的SQL查询,找到查询过慢的SQL,优化之.