Host ‘xx‘ is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts‘ 解决方法

错误如下:

Caused by: java.sql.SQLException: null,  message from server: "Host '192.168.xxx.xx' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'"
  at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:127) ~[mysql-connector-java-8.0.11.jar!/:8.0.11]
  at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95) ~[mysql-connector-java-8.0.11.jar!/:8.0.11]
  at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.11.jar!/:8.0.11]
  at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:862) ~[mysql-connector-java-8.0.11.jar!/:8.0.11]
  at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444) ~[mysql-connector-java-8.0.11.jar!/:8.0.11]
  at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230) ~[mysql-connector-java-8.0.11.jar!/:8.0.11]
  at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226) ~[mysql-connector-java-8.0.11.jar!/:8.0.11]
  at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-3.4.5.jar!/:?]
  at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358) ~[HikariCP-3.4.5.jar!/:?]
  at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-3.4.5.jar!/:?]
  at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:477) ~[HikariCP-3.4.5.jar!/:?]
  at com.zaxxer.hikari.pool.HikariPool.access$100(HikariPool.java:71) ~[HikariCP-3.4.5.jar!/:?]
  at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:725) ~[HikariCP-3.4.5.jar!/:?]
  at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:711) ~[HikariCP-3.4.5.jar!/:?]
  at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_111]
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[?:1.8.0_111]
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[?:1.8.0_111]
  at java.lang.Thread.run(Thread.java:745) [?:1.8.0_111]

原因:
同一IP的 connection errors 超出默认的最大值,从而导致的阻塞;当客户端连接服务端超时(超过connect_timeout,默认10s), 服务端就会给这个客户端记录一次 error,当出错的次数达到max_connect_errors 的时候,这个客户端就会被锁定。

所以可根据业务来尽量把这个值设置大一点,但并非越大越好,越大被攻击时安全性越低。


解决方法:
方法一:
直接重启mysql服务。


方法二:
flush hosts进行刷新清理hosts文件。

flush hosts;

方法三:

修改默认的 max_connect_errors 连接数(mysql 5.6以上默认是100)

-- 查询默认连接数
show variables like '%max_connect_errors%';
-- 修改连接数
set global max_connect_errors = 5000;

扩展:
同理我们可以修改mysql的最大连接数。

-- 查询连接数
show variables like '%max_connections%';
-- 修改连接数
set global max_connections = 5000;

-- 查看 MYSQL 服务被多少个客户端连接了
show processlist;

方法四:

以上设置在重启 Mysql 服务后会失效,所以建议修改MySQL配置文件 my.cnf(Linux/Unix)或 my.ini(Windows)

vi /etc/my.cnf

在[mysqld]部分添加或修改以下行:

[mysqld]
max_connect_errors = 5000
max_connections = 5000

然后重新启动MySQL服务以使更改生效。

systemctl start mysqld
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员大佬超

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值