ERROR 1129 (HY000) unblock with 'mysqladmin flush-hosts'

 

一、错误解释


ERROR 1129 (HY000): Host 'x.x.x.x' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

该IP有过多的错误连接,被mysql被阻止继续连接了。

 

二、错误原因 (Only)

本质原因是因为同一个IP在短时间内产生太多中断的数据库错误连接(超过max_connect_errors的最大值)而导致的。

 

三、产生原因

1、服务配置错误:

连接MySQL失败之后不断的重连,致使错误连接数飙升,超过最大值,使得同服务器的其他服务不能再继续连接MySQL。

 

2、网络超时:

MySQL客户端与数据库建立连接需要发起三次握手协议,正常情况下,这个时间非常短,但是一旦网络异常,网络超时等因素出现,就会导致这个握手协议无法完成,MySQL有个参数connect_timeout,它是MySQL服务端进程mysqld等待连接建立完成的时间,单位为秒。如果超过connect_timeout时间范围内,仍然无法完成协议握手话,MySQL客户端会收到异常致使错误连接增加。

3、其他原因: 

 脚本或者Shell命令在不断的使用错误的MySQL用户名和密码连接MySQL。

 

四、解决办法

1、修改 max_connect_errors 的值

mysql> use performance_schema;
mysql> show variables like 'max_connect_errors';
mysql> set global max_connect_errors = 10000;

2、检查网络超时

ping 一下服务所在环境和mysql数据库之间的网络,如果延时大于10s基本没救,建议重启服务器(如果服务是部署在docker里面的还建议重启docker)。

mysql内查看错误连接数量:

mysql> use performance_schema;
mysql> select * from host_cache\G

 

 

如果 COUNT_HANDSHAKE_ERRORS 数量 大于 SUM_CONNECT_ERRORS 那么大概可以确定就是网络问题。

 

3、根本解决办法

解决ERROR 1129 (HY000)的方法是执行flush host或者 mysqladmin flush-hosts,其目的是为了清空host cache里的信息,那是不是说不使用host cache就可以了?使host cache不生效(禁用 MySQL DNS 查找)的方式有如下两种:

 

A、设置 host_cache_size 为0

mysql> set global host_cache_size=0;

 

B、配置skip-name-resolve 

编辑mysql配置文件 my.cnf

vi /etc/my.cnf

在 [mysqld] 下面添加 下面这一行

skip-name-resolve

 

 

 

 

 

posted @ 2021-07-14 10:04  一文搞懂  阅读(3730)  评论(0编辑  收藏  举报