MYSQL连接报错,错误ERROR 1129 (00000): Host ” is blocked because of many connection errors;
有一次在工作中偶然遇到了这个问题,我的可以连接没问题,同事说数据库连不上,开始以为连接数太小了,后来发现连接数够大,于是上网查询到了解决方法:
错误的大意:有太多连到mysql服务器的连接,连到一半就断了,也就是说尝试连接mysql没有成功!
出错的原因:这个同事尝试登陆mysql次数太多了,并且都没有登陆成功~~
简单叙述连mysql的流程:
1.根据mysql的连接协议,发起握手,这在网络层面。
2.mysql服务器在内存上创建客户端连接的数据结构。
3.连接认证,就是看看客户端的权限,如用户名,密码允许不
4.监听端口,等待命令
解决办法:
执行mysqladmin flush-hosts命令或者 FLUSH HOSTS 命令
mysqladmin flush-host
/* FLUSH HOSTS*/
说明:系统变量max_connect_errors设置了允许中断的次数,超过了这个次数,mysql就报上边的错,因为它觉得可能哪里有问题(难道是恶意攻击?),然后它就不让新的连接连了, 默认max_connect_errors 是10,但可动态调,不过调max_connect_errors 不是根本解决办法
ERROR 1129 :HOST ‘XXXXX‘ is blocked because of many connection errors及max_connect_errors参数说明
总结以下几点:mysql8.0.19
1. 该参数对本地登录及远程登录密码错误次数没有效果
2. 对网络超时、连接超时以及telnet ip 3306操作有影响
telnet ip 3306 #执行这个,然后ctrl+C断开,错误累计一次,因此可以用这个方式去测试最大错误次数。
3.参数查看:
show variables like '%max_connect_errors%';
4.错误累计次数查看:
select * from performance_schema.host_cache # 表字段sum_connect_errors值
5.当sum_connect_errors这个值大于max_connect_errors,则出现HOST is blocked错误
6.同一个ip地址短时间内登录失败次数超过max_connect_errors值才会出现HOST is blocked
7.用该ip成功登录一次,则清零
解决方法:
1.调大max_connect_errors参数,越大越好
set global max_connect_errors=1000000
2.执行命令
mysqladmin -uroot -p flush-hosts
这种方法不好,因为会清空host_cache表,导致其他服务器客户端都要重新DSN解析。
3.将设为0,本质上就是禁掉host cache内存区域的使用。
set gloabl host_cache_size=0
4.在my.cnf里面添加skip-name-resolve参数,禁止使用DNS解析。弊端:客户端不能用机器名连接,只能用IP地址。
5.在my.cnf里面添加skip-networking参数,关闭TCP/IP连接方式。因为只有远程连接这个参数才起作用。