错误:Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

原因:

同一个ip在短时间内产生太多(超过mysql数据库max_connection_errors的最大值)中断的数据库连接而导致的阻塞;

分析原因:

经排查,是由于MYSQL数据库的参数:max_connect_errors(系统默认10)
mysqld已经得到了大量(max_connect_errors)的主机’hostname’的在中途被中断了的连接请求累计超过10次,就再也无法连接上mysqld服务,直到 FLUSH HOSTS 或者 重启MySQL服务。

解决方法:

1、提高允许的max_connection_errors数量(治标不治本):

① 进入Mysql数据库查看max_connection_errors:

> show variables like '%max_connect_errors%';   
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| max_connect_errors | 1000  |
+--------------------+-------+

② 修改max_connection_errors的数量为1000:

set global max_connect_errors = 1000;

vim /etc/my.cnf.d/server.cnf
[mysqld]
port = 3306
max_allowed_packet=12800M
max_connections=2048

max_connect_errors=1000

③ 查看是否修改成功:

show variables like '%max_connect_errors%';

2、使用mysqladmin flush-hosts 命令清理一下hosts文件

# whereis mysqladmin
mysqladmin: /usr/bin/mysqladmin /usr/share/man/man1/mysqladmin.1.gz

① 在查找到的目录下使用命令修改:

/usr/bin/mysqladmin flush-hosts  -h192.168.1.1 -P3306 -uroot -p123456;

备注:

其中端口号,用户名,密码都可以根据需要来添加和修改;

配置有master/slave主从数据库的要把主库和从库都修改一遍的(我就吃了这个亏明明很容易的几条命令结果折腾了大半天);

第二步也可以在数据库中进行,命令如下:

> flush hosts;     
Query OK, 0 rows affected (0.00 sec)