Too many connections
从字面理解,mysql链接数过多。当链接数量过多,且来不及释放时便会出现此错误。mysql
查看mysql当前链接信息,特别要注意sleep休眠状态的链接。
sql
show full processlist;
Command 状态:数据库
- SLEEP
线程正在等待客户端发送新的请求。
- QUERY
线程正在执行查询或者正在将结果发送给客户端。- LOCKED
在MYSQL服务层,该线程正在等待表锁。在存储引擎级别实现的锁,如INNODB的行锁,并不会体如今线程状态中。对于MYISAM来讲这是一个比较典型的状态。但在其余没有行锁的引擎中也常常会出现。ANALYZING AND STATISTICS 线程正在收集存储引擎的统计信息,并生成查询的执行计划。- COPYING TO TMP TABLE (ON DISK)
线程正在执行查询,而且将其结果集都复制到一个临时文件中,这种状态通常要么是在作GROUP BY操做,要么是文件排序操做,或者是UNION操做。若是这个状态后面还有ON DISK的标,那表示MYSQL正在将一个内存临时表放到磁盘上。- SORTING RESULT
线程正在对结果集进行排序。- SENDING DATA
线程可能在多个状态之间传送数据,或者生成结果集,或者在向客户端返回数据。
查看mysql设置的最大链接数服务器
show global variables like 'max_connections';
服务器响应的最大链接数ide
show global variables like 'max_user_connections';
建议:服务器响应的最大链接数值占服务器上限链接数值的比例值在10%以上,若是在10%如下,说明mysql服务器最大链接上限值设置太高。性能
max_user_connections/max_connections * 100% >=10%线程
若是最大链接数量没问题,而sleep休眠状态的链接过多,则应该从两方面注意:code
须要主题:wait_timeout设置过大有弊端,其体现就是MySQL里大量的SLEEP进程没法及时释放,拖累系统性能。若是设置太小,可能会遭遇到“MySQL has gone away”之类的问题。排序
要想从根本上解决sleep过多的问题,需从如下面三点排查:进程
最后快速解决过程
set GLOBAL max_connections = 500; set GLOBAL wait_timeout = 300; set GLOBAL interactive_timeout = 600;