记message from server Host ‘XXX.XXX.XXX.XXX‘ is blocked because of many connection errors;

记java.sql.SQLException: null, message from server: "Host ‘XXX.XXX.XXX.XXX’ is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’"问题

产生原因:

一台服务器访问另一台服务器数据库,因为不可控原因一直失败,最后被数据库所在拉黑了

排查过程:

  1. 启动服务失败,报错
  2. 本地通过Navicat访问另一台服务器数据库,没有任何问题
  3. 在一台服务器上直接访问另一台服务器数据库:mysql -h XXX.XXX.XXX.XXX -P 15306 -u root -p 访问不通
  4. 最后排查到出现java.sql.SQLException: null, message from server: “Host ‘XXX.XXX.XXX.XXX’ is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’”

因为mysql的connection errors的数量达到了配置的max_connect_errors这个变量,8.0上默认配置是100,也就是说当连续有100个connect errors的时候,mysql就认为可能有人在攻击数据库,所以直接智能的ban掉这个ip。

注意这里是连续100个,如果还没有到100个,突然有一个成功的连接,则会把connect errors数量清0,重新计算。

可以通过:mysql > show variables like 'max_connect_errors';

来查看当前配置的这个参数值。可以通过修改conf文件中的max_connect_errors变量来修改此参数,然后重启当前服务器。

解决方法:

在确认host name的ip是正常的ip后,并且确认没有很不稳定的网络连接原因,即,在确认这是一次正常的block之后,可以通过

mysqladmin flush-hosts

来清掉本次block,也可以登进mysql后,在命令行用mysql > flush hosts; 来清理。

你可能感兴趣的:(后端,mysql,服务器)