我有几台运行 CentOS 的机器,其中一台设置为 mysql 服务器。我已经运行了一段时间,能够毫无问题地从远程机器连接到 mysql,但在所有 PC 断电并重启后,我现在得到了
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.22.6' (113)
在服务器机器上,我能够毫无问题地本地连接到 MySQL 服务器。
粗略搜索后我发现 113 表示“没有到主机的路由”,因此这似乎是网络问题。我可以从客户端计算机 ping 192.168.22.6,也可以通过 SSH 进入该计算机。
在服务器电脑上,如果我运行netstat -lnp | grep mysql
,我会得到:
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1588/mysqld
unix 2 [ ACC ] STREAM LISTENING 13448 1588/mysqld /var/lib/mysql/mysql.sock
因此看起来它正在监听端口 3306。但是,如果我转到客户端计算机并运行nc -vz 192.168.22.6 3306
,我会得到:
nc: connect to 192.168.22.6 port 3306 (tcp) failed: No route to host
我认为这可能是防火墙问题,当我在服务器上运行时iptables --list-rule | grep 3306
没有得到任何结果。这是否意味着端口 3306 被防火墙阻止(即使 netstat 显示它正在监听)?如果是这样,我该如何为该端口添加例外?还是我完全走错了路?
编辑:我还应该注意我的 my.cnf 文件如下所示:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
max_connections=500
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#bind-address = 192.168.22.6
slow_query_log=1
log-slow-queries = /var/log/mysql-slow.log
long_query_time = 10
log-queries-not-using-indexes
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
所以,我没有任何 skip-networking。我不确定未设置绑定地址是否是个问题?
答案1
检查端口是否打开,
firewall-cmd --get-active-zones
如果没有打开端口,
firewall-cmd --zone=public --add-port=port_id/tcp --permanent
然后重新加载防火墙
firewall-cmd --reload
允许 mysql 用户通过另一台主机访问,
GRANT ALL PRIVILEGES ON user_name.* TO 'db_name'@'192.168.1.%' IDENTIFIED BY 'password';
'192.168.1.%':允许 192.168.1.x 范围内的所有主机访问,或者您可以指定 IP。