MySQL flush-hosts问题
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;
解决方法
- 执行下如下命令,清空下错误连接就好了
mysqladmin flush-hosts
- 修改最大错误连接数(默认值是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掉问题。