今天同事在测试的时候发现在测试服务器上无法连接数据库服务器,但是在本地可以连,看了防火墙什么的都没有问题。我于是说可以用telnet
试一下
telnet 192.XXX.XX.20 3306
执行之后报错如下图
报错信息:“Host '192.XXX.XX.13' is blocked because of many connection errors; unblock with'mysqladmin flush - hosts'”
(一)错误原因
MySQL
服务器具备一种内置的安全机制,当某个主机在短时间内产生大量连接错误时,为防范潜在的暴力破解或恶意攻击行为,MySQL
会自动将该主机列入封锁列表。例如,如果客户端在尝试连接 MySQL
服务器时,频繁出现用户名密码错误、网络不稳定导致连接中断等情况,就可能触发这一机制。
(二)解决方法
1.使用mysqladmin flush - hosts
命令解除封锁
在终端执行命令
Linux
或 macOS
系统:打开终端,运行mysqladmin -u root -p flush - hosts
命令。这里-u root
表示使用 root
用户,-p
表示需要输入密码。执行该命令后,系统会提示输入 MySQL
的 root
密码,输入正确密码并回车,若密码无误,封锁列表将被清除,被封锁的主机192.XXX.XX.13
会被解封。
Windows
系统:打开命令提示符(CMD)或者 PowerShell
,同样运行mysqladmin -u root -p flush - hosts
命令。若 MySQL
的可执行文件路径未添加到系统环境变量,需先进入MySQL
的bin
目录,例如:cd C:\Program Files\MySQL\MySQL Server X.X\bin
(X.X
代表安装的 MySQL
版本号),然后再执行上述命令。
2.调整 MySQL
的max_connect_errors
参数
编辑 MySQL
配置文件:通常,MySQL
的配置文件在Linux
和 macOS
系统中是/etc/mysql/my.cnf
或者/etc/my.cnf
,在 Windows
系统中是C:\ProgramData\MySQL\MySQL Server X.X\my.ini
(X.X
为版本号)。使用文本编辑器打开该文件,在Linux
或 macOS
中可使用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 服务,右键点击选择 “重启”。