flush-hosts 异常
错误原因
同一个ip在短时间内产生太多(超过mysql
数据库max_connection_errors
的最大值)中断的数据库连接而导致的阻塞。
当客户端连接服务端超时(超过connect_timeout
),服务端就会给这个客户端记录一次error,当出错的次数达到max_connect_errors
的时候,这个客户端就会被锁定,从而应用出现异常:java.sql.SQLException: null, message from server: "Host 'xxx' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'"
。
参考:https://www.cnblogs.com/kerrycode/p/8405862.html
解决办法
方法一
进入数据库将
max_connection_errors
参数调高,也可以在my.cnf
文件中修改不过需要重启MySQL
。查看该属性设置为多大
1
show global variables like '%max_connect_errors%';
根据业务尽量把这个值设置大一点,
MySQL
max_connect_errors
默认值为100
,我们可以根据具体需要设置大一点,这里设置为500
。1
set global max_connect_errors=500;
注意:数据库主从或集群模式时,有节点都需要单独设置。
方法二
1
2
3mysqladmin -uroot -proot -h192.168.1.1 flush-hosts
或
flush hosts;注意:数据库主从或集群模式时,要确定是被哪个
MySQL
服务拒绝了,刷新对应的服务器即可,不确定的话可以所有节点都刷新。