-------------------------------------------------------------------------------------------------正文---------------------------------------------------------------------------------------------------------------
背景:
MySQL-5.5.41, 开发用的环境连接MySQL客户端时报错;
场景:
业务方反馈在连接MySQL的时候报错了, 且应用也在输出了一样的错误信息:
点击(此处)折叠或打开
- ERROR 1129 (HY000): Host 'x.x.x.x' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
且开发的同事尝试修改了max_connect_errors的参数;
调整到1000以后, 再进行flush hosts, 虽然能够解决问题, 但是一分钟之后还是会报同样的错误;
分析:
引起这个问题的原因很直白, 在报错信息里面都写明了, "because of many connection errors";
然后看了一下aborted connections, 确实如描述一般, too many......
中间还查看了一次host的参数, 因为在5.7里面, 设置host_cache_size为0就可以避免这个问题了,
然而5.5压根就没有这个参数......_(:з」∠)_
考虑一下发生这个问题的根本原因:
host_cache中, 记录了的blocked错误, 如果这种错误的数量太多, 且在上一次成功连接之后, 这种错误的数量超过了max_connect_errors的值,
那么MySQL就会抛出这个错误, 并提示需要flush hosts;
5.7中设置size为0(动态参数), 变相的使得mysql认为blocked的数量一直是0, 所以就不会再报这种错了,
从根本原因来看, 关掉host cache也是一个解决的办法;
那么如何关掉host cache?
MySQL5.5和5.7在show variables中都没有一个明确的参数能关闭host cache,
翻了一下文档, 发现只能在启动的时候加上skip-host-cache才能关闭;
处理方式:
最终是协商了重启的时间, 在开发机的MySQL配置文件加上了skip-host-cache来彻底关闭这个cache, 然后随开发们乱搞去吧......╮(╯_╰)╭