我有一个客户端正在运行 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';
测试完成后请删除测试数据库和测试用户