连接数据库报错(mysql -v 8.0.24)
message from server: "Host 'xx.xx.xx.xx' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'"
主机xx.xx.xx.xx被锁,因为许多连接错误;
如果不求原因
mysql -u root -p 后台登陆mysql以后 执行 flush hosts;
或者通过设置较大的 max_connect_errors值
mysql> set global max_connect_errors=1000;
可以暂时解决问题
虽然报错解决了,但是过段时间以后,还会报以上错误;
MAX_CONNECT_ERRORS
如果要彻底解决此问题,请往下看
首先了解下MySQL performance_schema下的hosts表和host_cache;我这里是通过navicat premium查看的;
也可以通过
mysql> use performance_schema;
mysql> select * from host_cache\G;
mysql> select * from hosts\G;
host_cache表会记录连接客户端主机名、IP地址信息和其他连接信息,帮助诊断连接问题;(flush hosts;清除的是此表的数据)
需要关注的两个列:
SUM_CONNECT_ERRORS:连接错误数
COUNT_HANDSHAKE_ERRORS:握手错误计数
hosts表中记录了连接客户端的HOST(主机名),以及CURRENT_CONNECTIONS(当前连接数),和TOTAL_CONNECTIONS(总连接数);
看到此处以后,你大概也清除了,其实也就是host_cache中SUM_CONNECT_ERRORS=MAX_CONNECT_ERRORS 时,再连接数据库时报的错;
#查看值
mysql> show variables like '%max_connect_errors%';
#设置值
mysql> set global max_connect_errors=3;
那到底什么的错误,才会让SUM_CONNECT_ERRORS累加1呢?
1.首先排除网上说的密码错误,SUM_CONNECT_ERRORS累加1,密码错误的话只会让COUNT_AUTHENTICATION_ERRORS累加1;
2.由于网络原因或其它一些连接错误会导致SUM_CONNECT_ERRORS累加1;
网络原因 Lost connection to MySQL server at 'XXX', system error: errno;
网络原因可以通过设置connect_timeout解决
#一般默认是10s
mysql> mysql> show variables like 'connect_timeout';
mysql> set global connect_timeout=20;
其它原因,比如
也会导致SUM_CONNECT_ERRORS累加1;
我当时排除网络原因、并把所有我知道的数据库连接都关闭以后,还是发现SUM_CONNECT_ERRORS值在一直变大;
这时候可以通过mysql服务CONNECTION_CONTROL和CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS插件来查看监控情况;
1.查看是否安装插件
mysql> show plugins;
2.如果没有的话,登录mysql执行
mysql>INSTALL PLUGIN CONNECTION_CONTROL SONAME 'connection_control.so';
mysql>INSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS SONAME 'connection_control.so';
3.插件安装成功后(如果只是为了排查问题,其它参数不要设置,如果有需求可以参考参考官网:https://dev.mysql.com/doc/refman/5.7/en/connection-control-installation.html)
-- 执行下面这个SQL,看是否有错误记录,错误记录会记录在information_schema.connection_control_failed_login_attempts表
select * from information_schema.connection_control_failed_login_attempts;
这时候可以看到用户主机,和失败的尝试;
我是通过这个,找到了一个主库,在用一个不用的用户,不停的在向从库发送请求;然后删除主从库关系,问题解决;SUM_CONNECT_ERRORS不在增大;
记录日常一次排错记录;