连接远程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端口

注:阿里云和ubuntu命令行的iptables必须都打开的,只要有一个没开那这个端口就是没开。

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

如果mysql用户表不允许的话,就算把防火墙关了也telent 3306失败,报这个错:'XX.XX.XX.XX' is not allowed to connect to this MySQL serverConnection closed by foreign host.

前两点参照 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的话,那大概是长这个样子了:

        上图是我的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就发现连通了,成功的图如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值