连接远程mysql(主要是阿里云和ubuntu系统的防火墙设置)

我想在python代码中获取其他IP地址的mysql数据库的信息,直接这么写:db = torndb.Connection("IP地址","数据库名","root","密码"),等了好久,发现连不上。通过在阿里云网站上修改防火墙配置、更改ubuntu的iptables,最后能连上了。以下是我的步骤(Ubuntu 14.04, mysql 5.5):

首先ping, telnet 你访问的IP地址

例如:ping XXX.X.X.X  以及 telnet XXX.X.X.X 3306 

ping失败,那问题就和3306端口以及mysql无关了,不讨论了。

ping可以,但 telnet 失败,是3306端口没打开的原因。我就是telent失败,下面介绍我的解决方法:

1. 添加阿里云安全组规则的MySQL 3306端口

2. 在MySQL用户表添加用户并将host设置未所有IP都能访问

前两点参照 MySQL5.7开启远程访问及Ubuntu18.04防火墙3306端口

3.修改ubuntu下的 iptables 防火墙

    1. 查看当前防火墙的所有规则 iptables -L -n 

        看看有没有3306的,如果没有则添加规则:

vi etc/iptables.rules     #注意:ubuntu不同版本的iptables文件路径可能不一样

在最后增加一行:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

:wq   #保存退出

        如果有3306的话,那大概是长这个样子了:

连接远程mysql(主要是阿里云和ubuntu系统的防火墙设置)_第1张图片

        上图是我的iptables文件,里面3306有很多行,不懂为啥这么多重复的。

        如果3306那行是DROP的话,就通过vi etc/iptables.rules 改成 ACCEPT。

     2. 保存iptables.rules文件并生效

         这个网上很多博客说的方法都不一样,ubuntu版本不同命令也不同吧,我是14.04。我试验成功的命令是 iptables-restore < /etc/iptables.rules,只要这一行就可以,在这之前不要sudo sh -c "iptables-save > /etc/iptables.rules"!!!否则刚修改好的iptables.rules就又变成原来的了。

最后再telnet就发现连通了,成功的图如下:

你可能感兴趣的:(连接远程mysql(主要是阿里云和ubuntu系统的防火墙设置))