flush-hosts问题

问题

连接mysql时出现下面错误

"Host '192.168.1.100' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'"

原因

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

查看最大错误连接数

show variables like '%max_connect_errors%';

查看当前的错误连接数

use `performance_schema`;
SELECT IP,HOST,SUM_CONNECT_ERRORS from host_cache;

解决方法

  1. 执行下如下命令,清空下错误连接就好了
mysqladmin flush-hosts
  1. 修改最大错误连接数(默认值是100)
set global max_connect_errors=1000;

show global status like '%abort%';

解决方案

1.调大max_connect_errors参数

2.mysqladmin flush-hosts

这种方法不好的地方在于,会flush host cache内存区域。类似oracle的flush shared_pool这种命令。这会影响其他的客户端程序。所有客户端连接时不得不重新去解析。

3.将host_cache_size设为0.本质上就是禁掉host cache内存区域的使用。

4.设置参数–skip-name-resolve关闭DNS解析。不过这样客户端将不能再用机器名连接,只能用IP地址了。

5.设置参数–skip-networking关闭TCP/IP连接方式。前面说过host cache区域使用条件之一就是用TCP/IP的连接方式,这是从源头上就cut掉问题。