解决Linux下Can't connect to MySQL server(60)的问题

需求是使用第三方软件远程连接Linux上的mysql,MySQL已经添加了 hostname 为 % 的权限用户,软件有MySQL Workbench和Navicat,但均无法远程连接。

错误提示如下:

Can't connect to MySQL server on'XXXXX'(60)

MySQL权限没问题,用户名和密码也都正确,那就检查一下iptables防火墙了。

登录服务器,执行如下命令查看一下 iptables

sudo iptables -L

返回如下信息:

target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:https 
DROP       tcp  --  anywhere             anywhere            tcp dpt:mysql 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ftp-data 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ftp 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpts:dnp:30000 
ACCEPT     icmp --  anywhere             anywhere            icmp echo-request

可以看到其中有一条 mysql 访问的 DROP 规则,需要删除这条规则,于是先对iptables命令加个序列号参数:

sudo iptables -L -n --line-number

返回:

num  target     prot opt source               destination         
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
2    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
3    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22 
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80 
5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:443 
6    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:3306 
7    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:20 
8    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:21 
9    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpts:20000:30000 
10   ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 8

接着可以根据序号直接来删除第6条即可。

sudo optables -D INPUT 6

最后需要重启一下MySQL或者直接 lnmp restart。