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;