我已经在 HAProxy 上运行了VIP:192.168.61.32
,并且我已经检查过netstat -tulnp|grep 3306
tcp 0 0 192.168.61.32:3306 0.0.0.0:* LISTEN 7895/haproxy
但是当我跑步时mysql -h 192.168.61.32 -u root -p
:
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
我的后端 Mysql 节点位于192.168.61.33 & 192.168.61.34
,我可以使用以下方式直接连接到它们 mysql -h 192.168.61.33 -u root -p
mysql -h 192.168.61.34 -u root -p
答案1
您可能需要检查 haproxy 和 mysql 之间是否存在连接错误。如果您运行systemctl status haproxy
或tail /var/log/haproxy-traffic.log
,您可能会发现类似下面的错误
服务器 mysql_farm/galera03 已关闭,原因:Layer7 状态错误,代码:0,信息:“主机‘xx.xx.xx.xx’由于许多连接错误而被阻止;使用‘mysqladmin flush-hosts’解除阻止”,检查时长:0ms。剩余 2 个活动服务器和 0 个备份服务器。0 个会话处于活动状态,0 个重新排队,0 个剩余在队列中。t
在这种情况下,您需要运行命令mysqladmin flush-hosts
从 mysqld 中清除被阻止的 IP,以便 haproxy 可以再次连接。
您可能需要运行以下命令mysqladmin -uroot -p flush-hosts
有关如何解决错误的更多参考,请参阅下面的文档。 https://dev.mysql.com/doc/refman/5.7/en/host-cache.html#blocked-host
答案2
我认为您可以重新检查 bind-address 并编辑全局 my.ini 文件的 [mysqld] 部分:
[mysqld]
-- 其他各种设置
port = 3306
bind-address = 127.0.0.1
保存此文件,然后使用命令重新启动服务 mysql:
service mysql restart
编辑
要授予用户从远程 IP 的访问权限,请在以 MySQL 根用户身份登录时从 mysql> shell 运行以下命令:
GRANT ALL on somedb.* to [email protected] identified by 'somepassword';
如果你想授予来自任何远程 IP 的某些用户的访问权限:
GRANT ALL on somedb.* to someuser@% identified by 'somepassword';
完成这些步骤后,请确保重新启动 MySQL 服务器,以便它读取配置中的更改。