我无法在端口 3306 上进行远程连接。我的托管公司说我必须使用 iptables 允许在端口 3306 上进行连接。
在终端上输入什么命令
Chain INPUT (policy DROP)
target prot opt source destination
...
ACCEPT tcp -- anywhere anywhere tcp dpt:mysql
ACCEPT tcp -- anywhere anywhere tcp dpt:mysql
ACCEPT tcp -- anywhere anywhere tcp dpt:mysql
ACCEPT tcp -- eth2947.rt.adsl.internode.on.net anywhere state NEW tcp dpt:mysql
...
答案1
尝试使用tcptraceroute hostname.fqdn 3306
来查看连接是否在某处受到防火墙保护。
最有可能的问题是 mysql 的默认配置是不监听 IP 连接(旧默认skip-networking
选项),或者只监听环回(bind-address
选项)。如果存在这些选项,请尝试将其注释掉,然后重新启动 mysql。
答案2
嗯,这很大程度上取决于你当前的 iptables 规则集是什么样的。类似这样的内容应该在你的 /etc/sysconfig/iptables 文件中起作用:
-A INPUT -m state --state NEW -m tcp -p tcp -s 1.2.3.4 --dport 3306 -j ACCEPT
...其中 1.2.3.4 是您正在连接的 IP 地址。
如果不起作用,请发布 /etc/sysconfig/iptables 的内容,我会修改我的答案。
另一个选项是通过 ssh 隧道连接到 mysql 服务器。要做到这一点,请使用以下命令连接到您的服务器:
$ ssh user@host -L3306:localhost:3306
然后将本地 mysql 客户端指向 localhost:3306,它将通过隧道连接到服务器。请记住,您还需要在 mysql 中为适当的用户/主机组合授予访问权限。
我应该补充一点,除非绝对需要,否则将 mysql 端口暴露给互联网通常不是一个好主意。ssh 隧道选项是更好的远程连接方式。