解决 MySQL 中 “Host is blocked” 错误

今天同事在测试的时候发现在测试服务器上无法连接数据库服务器,但是在本地可以连,看了防火墙什么的都没有问题。我于是说可以用telnet试一下

telnet 192.XXX.XX.20 3306

执行之后报错如下图


image.png

报错信息:“Host '192.XXX.XX.13' is blocked because of many connection errors; unblock with'mysqladmin flush - hosts'”

(一)错误原因

MySQL 服务器具备一种内置的安全机制,当某个主机在短时间内产生大量连接错误时,为防范潜在的暴力破解或恶意攻击行为,MySQL 会自动将该主机列入封锁列表。例如,如果客户端在尝试连接 MySQL 服务器时,频繁出现用户名密码错误、网络不稳定导致连接中断等情况,就可能触发这一机制。

(二)解决方法

1.使用mysqladmin flush - hosts命令解除封锁

在终端执行命令
LinuxmacOS 系统:打开终端,运行mysqladmin -u root -p flush - hosts命令。这里-u root表示使用 root 用户,-p表示需要输入密码。执行该命令后,系统会提示输入 MySQLroot 密码,输入正确密码并回车,若密码无误,封锁列表将被清除,被封锁的主机192.XXX.XX.13会被解封。
Windows 系统:打开命令提示符(CMD)或者 PowerShell,同样运行mysqladmin -u root -p flush - hosts命令。若 MySQL 的可执行文件路径未添加到系统环境变量,需先进入MySQLbin目录,例如:cd C:\Program Files\MySQL\MySQL Server X.X\binX.X代表安装的 MySQL 版本号),然后再执行上述命令。

2.调整 MySQLmax_connect_errors参数

编辑 MySQL 配置文件:通常,MySQL 的配置文件在LinuxmacOS 系统中是/etc/mysql/my.cnf或者/etc/my.cnf,在 Windows 系统中是C:\ProgramData\MySQL\MySQL Server X.X\my.iniX.X为版本号)。使用文本编辑器打开该文件,在LinuxmacOS 中可使用sudo nano /etc/mysql/my.cnf命令。
添加或修改max_connect_errors参数:在[mysqld]部分添加或修改max_connect_errors参数,例如将其设置为一个较大的值,如max_connect_errors = 1000。该参数规定了一个主机在被封锁之前所能允许的最大连接错误次数,增大此值可减少主机被误封锁的概率。
保存并退出文件:在编辑器中,按Ctrl + X,然后按Y确认保存,最后按Enter退出编辑器。

3.重启 MySQL服务:

Linux 系统中,使用sudo systemctl restart mysql命令重启 MySQL 服务;
Windows 系统中,可通过服务管理器找到 MySQL 服务,右键点击选择 “重启”。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容