无法连接到远程服务器上的 mysql

无法连接到远程服务器上的 mysql

我有几台运行 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。

相关内容