MySQL / 防火墙 / 无法连接到 MySQL 服务器

MySQL / 防火墙 / 无法连接到 MySQL 服务器

我有一个客户端正在运行 mysql 服务器bind-address=0.0.0.0

以下是 iptables 的输出

root@host:/var/www# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
REJECT     all  --  anywhere             127.0.0.0/8         reject-with icmp-port-unreachable
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             mysql               tcp dpt:mysql
LOG        all  --  anywhere             anywhere            limit: avg 5/min burst 5 LOG level debug prefix `iptables denied: '
DROP       all  --  anywhere             anywhere

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
DROP       all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere

一个 Web 服务器可以连接到 mysql 服务器,但另一个服务器无法连接。它们都使用相同的用户名和密码连接到同一个 IP 地址。似乎配置了另一个防火墙来阻止此请求。我不确定还要检查什么。

mysql -h <host> -u <user> -p<password>
ERROR 2003 (HY000): Can't connect to MySQL server on '<host>' (110)

有什么想法可以给我指明正确的方向吗?

更新

事实证明,新的 Web 服务器与 mysql 服务器设置在不同的数据中心,因此内部网络 IP 无法通信。

答案1

我认为你的问题出在你的 iptables 的第二行:

REJECT     all  --  anywhere             127.0.0.0/8         reject-with icmp-port-unreachable

它应该在最后

答案2

前几天遇到过这种情况。这是由于还原数据库引起的,当时我还原了 mysql 数据库(包含我的用户)

必须手动创建用户来解决我的问题。

您的 mysql 服务器用户是否有权限接受来自远程服务器的连接。

create user 'db_user'@'ip.address.of.remote.server' identified by 'password';
GRANT ALL PRIVILEGES ON test.* to 'db_user'@'localhost' identified by 'password'; 

例如如果你的客户端 IP 地址是 11.22.33.44

在你的 mysql 服务器上创建一个测试数据库

create database test;

现在创建一个测试用户

create user 'db_user'@'11.22.33.44' identified by 'password';

现在授予权限

GRANT ALL PRIVILEGES ON test.* to 'db_user'@'11.22.33.44' identified by 'password';

测试完成后请删除测试数据库和测试用户

相关内容