报错信息:
java.sql.SQLException: null, message server: "Host 'ora-rac2' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'"
原因:
mysqld达到大量(max_connect_errors)的主机名为‘ora-rac2’的再中途被中断了的连接请求。
当max_connect_errors次连接失败请求后,mysqld认为出错,因此当再次接受连接请求时会被锁住,并阻止进一步的客户端连接。直到执行mysqladmin flush-hosts命令,刷新host。
解决办法:
缺省mysqld在10个连接错误后阻止一台主机,可以通过命令设置该值:set global max_connect_errors=100;
mysql> show variables like 'max_connect%'; +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | max_connect_errors | 10 | | max_connections | 151 | +--------------------+-------+ 2 rows in set (0.00 sec) mysql> set global max_connect_errors=100; Query OK, 0 rows affected (0.00 sec) mysql> show variables like 'max_connect%'; +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | max_connect_errors | 100 | | max_connections | 151 | +--------------------+-------+ 2 rows in set (0.00 sec)
- Max_connect errors:是一个MYSQL中与安全有关的计数器值,负责阻止过多尝试失败的客户端连接,与性能无关。
- 当一个客户端连接失败(如密码错误)次数超过10次,则mysql会无条件强制阻止此客户端连接。
重置
此计数器的值,则必须重启
mysql服务器或者执行
flush hosts;
当该客户端成功连接一次mysql服务器后,针对此客户端的max_connect_errors会清零。
一般,mysql服务器不监听来自网络的连接,仅仅通过sock连接,这样可以防止绝大多数针对mysql的攻击;如果必须要开启mysql网络连接,则建议最好设置此值。