mysql5.7的连接数过多解决方案
mysql5.7的连接数过多解决方案
一 错误信息
状态码:5555
Error 1129: Host '127.0.0.1' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
二 解决方案
其他客户机连接错误次数过多时,mysql会禁止客户机连接
使用 mysqladmin flush-hosts 是清理host_cache表,它会记录连接客户端主机名、IP地址信息和其他连接信息,帮助诊断连接问题;(flush hosts;清除的是此表的数据)
2.1 临时方案
执行命令:
flush hosts;
set global max_connect_errors=10000;
2.2 根本解决
1 虽然报错解决了,但是过段时间以后,还会报以上错误;
关于这个错误,其实就是因为同一IP在短时间内,产生了很多中断的数据连接(超过 MAX_CONNECT_ERRORS 最大值)二导致的
performance_schema下的 hosts 表和 host_cache 表
host_cache表会记录连接客户端主机名、IP地址信息和其他连接信息,帮助诊断连接问题;(flush hosts;清除的是此表的数据)
如果要彻底解决此问题,请往下看
首先了解下MySQL performance_schema下的hosts表和host_cache。
mysql> use performance_schema;
mysql> select * from host_cache\G;
mysql> select * from hosts\G;
host_cache表会记录连接客户端主机名、IP地址信息和其他连接信息,帮助诊断连接问题;(flush hosts;清除的是此表的数据)
需要关注的两个列:
SUM_CONNECT_ERRORS:连接错误数
COUNT_HANDSHAKE_ERRORS:握手错误计数
hosts表中记录了连接客户端的HOST(主机名),以及CURRENT_CONNECTIONS(当前连接数),和TOTAL_CONNECTIONS(总连接数);
看到此处以后,你大概也清除了,其实也就是host_cache中SUM_CONNECT_ERRORS=MAX_CONNECT_ERRORS 时,再连接数据库时报的错;
#查看值
mysql> show variables like '%max_connect_errors%';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| max_connect_errors | 10000 |
+--------------------+-------+
1 row in set (0.00 sec)
#设置值
mysql> set global max_connect_errors=3;
2.由于网络原因或其它一些连接错误会导致SUM_CONNECT_ERRORS累加1;
网络原因 Lost connection to MySQL server at 'XXX', system error: errno;
网络原因可以通过设置connect_timeout解决
#一般默认是10s
mysql> show variables like 'connect_timeout';
mysql> set global connect_timeout=20;
- 感谢你赐予我前进的力量