连接数据库出现Host 'xxx' is blocked because of many connection error; unblock with 'mysqladmin flush-hosts'的解决方法(xshell-Linux-mysql)
问题截图:

一、出现原因:
同一个ip在短时间内产生太多(超过mysql数据库max_connection_errors的最大值)中断的数据库连接而导致的阻塞;当客户端连接服务端超时(超过connect_timeout,默认10s), 服务端就会给这个客户端记录一次error,当出错的次数达到max_connect_errors的时候,这个客户端就会被锁定。所以可根据业务来尽量把这个值设置大一点,mysql默认值为10,我们可以根据具体需要设置大一点,并非越大越好,越大被攻击时安全性越低。
二、解决办法:
MySQL安装在本地或直接在安装了MySQL的平台操作:
1.到安装bin目录下,使用mysqladmin -u root -p flush-hosts命里 输入密码后,即完成清除缓存或进入mysql>控制台,执行:flush hosts;
2.使用命令设置最大错误连接数:set global max_connect_errors=1000;
MySQL安装在Linux我们在windows使用Xshell等工具远程进行连接操作:
1.Linux命令连接mysql进入mysql>控制器:
错误连接方式:如果还使用以上本地方法输入密码会报密码错误,即使密码是正确的,还会出现localhost等字样说明这样肯定是不行的。

正确连接方式:mysql -h(mysql远程地址) -u(mysql登录账号) -p(mysql登录密码)比如下面的地址是192.168.114.112 账号和密码都是root
mysql -h192.168.114.112 -uroot -proot
注意:
密码中含有&,?,),(,等特殊字符时需要加\进行转义,未转义它会一直报密码错误:....(using password: YES)。
比如密码是abc&de输入密码时应该输入abc\&de而不是直接输入abc&de
mysql -h192.168.114.112 -uroot -pabc\&de
2.输入正确命令后即可进入mysql>,我们直接输入命令flush hosts进行刷新即可解决问题。

3. 修改最大错误连接数量max_connect_errors
可以先查看当前max_connect_errors的值是多少:在mysql>下输入show variables like '%max_connect_errors%';即可看到值,这里之前修改过是100。
show variables like '%max_connect_errors%';

输入命令set global max_connect_errors=300000;即可以修改,这里直接设置了300000,为了安全最好小一点。
set global max_connect_errors=300000;
坑:这里遇到了坑,前面命令与分号“;”要在同一行,如果忘了输入在下一行会报错,就像下面这样:

三、正确输入后我们可以看到修改成功了,SQLyog等工具也可以正常连接了。

四、如果你连接数据库使用外网地址进行连接操作内网数据库是不可行的,会一直处于连接状态然后直接报连接错误,必须要用内网的地址进行操作,即mysql -h192.168.114.112 -uroot -pabc\&de中的地址192.168.114.112只能是安装mysql的内网地址。

附:
mysql服务启动命令:
systemctl start mysqld
mysql查看服务是否启动命令:如果看到绿色的active(running)就说明启动正常
systemctl status mysqld

浙公网安备 33010602011771号