MySQL报错Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'和could not be resolved: Name or service not known

0    200    1

Tags:

👉 本文共约1510个字,系统预计阅读时间或需6分钟。

现象

'10.64.30.4' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

原因

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

max_connect_errors是一个MySQL中与安全有关的计数器值,它负责阻止过多尝试失败的客户端以防止暴力破解密码的情况。

max_connect_errors的值与性能并无太大关系,默认是10。意味着如果某一客户端尝试连接此MySQL服务器,但是失败(如密码错误等等)10次 ,则MySQL会无条件强制阻止此客户端连接。

如果希望重置此计数器的值,则必须重启MySQL服务器或者执行mysql> flush hosts; 命令。当这一客户端成功连接一次MySQL服务器后,针对此客户端的max_connect_errors会清零。

如果max_connect_errors设置过小,则网页可能提示无法连接数据库服务器。

分析

因为mysql默认会反向解析DNS,对于访问者Mysql不会判断是hosts还是ip都会进行dns反向解析,频繁地查询数据库和权限检查,这大大增加了数据库的压力,导致数据库连接缓慢,严重的时候甚至死机,出现“连接数据库时出错”等字样。

DNS解析是指,将 域名解析成ip地址;

DNS反解析是指,将IP地址反解析成域名;

解决 [Warning] [MY-010055] [Server] IP address '10.64.30.4' could not be resolved: Name or service not known

进入/etc 找到mysql的配置文件my.cnf(linux环境下)或者my.ini(windows环境下)进行编辑加入如下一行即可:

could not be resolved: Temporary failure in name resolution 的警告,可以使用 skip_host_cache 来搞定;
而 could not be resolved: Name or service not known 的警告,可以通过 skip_name_resolve=1 来搞定。禁止了域名解析,显然就不会出该警告了。

注意:skip_host_cache=1 会报错。直接 skip_host_cache 或者 skip-host-cache 就行了。

修改之后,需要重启。

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!
AiDBA后续精彩内容已被站长无情隐藏,请输入验证码解锁本文!
验证码:
获取验证码: 请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“AiDBA”或者“dbaup6”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复