解决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。