Windows Azure VM:远程MySQL数据库的连接超时

时间:2015-09-18 18:47:26

标签: python mysql azure azure-virtual-machine

我遇到了Windows Azure的一个独特问题,我在其他提供商身上看不到。我一直在运行从远程虚拟机到运行在DigitalOcean虚拟机上的MySQL数据库的连接。我已成功与AWS,Rackspace,Google和所有其他提供商建立联系,但出于某种原因,Microsoft Azure虚拟机似乎无法正常工作。

VM OS:Ubuntu 14.04

我尝试使用PyMySQL和SQLAlchemy进行连接。

我尝试过的事情:

  1. 端口已打开并正在侦听
  2. 用户肯定有权将数据上传到数据库(与此用户的其他远程连接都可以正常工作)。
  3. 我甚至试过" ufw disable"对于Windows Azure VM上的防火墙
  4. 我已将3306设置为Azure VM上的端点
  5. 尽管我尝试了所有尝试,但无法建立连接。我在设置中缺少什么东西?

1 个答案:

答案 0 :(得分:0)

由于Azure VM禁用了ICMP,我们可以使用SSH隧道允许外部访问内部网络资源。但是,我没有资源来创建DigitalOcean VM,但我在2个云服务中创建了2个Azure VM,以尝试重现该问题。

我在VM.1中安装了mysql-server,在VM.2中安装了mysql-client。

然后我尝试直接从VM.2连接MySQL服务器,我收到消息“无法连接到MySQL ......”。

要解决此问题,我按照this post在VM.1中创建了一个SSH隧道,该隧道托管了MySQL服务器:

  • 打开端口3306,远程客户端可以连接到MySQL服务器。运行以下命令以打开TCP端口3306

    iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

    现在让我们通过运行此命令来检查端口3306是否已打开:

    sudo netstat -anltp|grep :3306

  • 为端口3307创建SSH隧道

    sudo ssh -fNg -L 3307:127.0.0.1:3306 azurevmuser@servername

  • 在Azure管理门户中的VM的仪表板中为端口3307创建端点。有关详细信息,请参阅how to add endpoint to you Virtual machine。现在您的数据库主机名是<vm_name>.cloudapp.net:3307

然后使用命令从VM.2连接MySQL服务器:

# mysql -h <vm_1_name>.cloudapp.net -P 3307 -u user –pPassword

它会正常工作。如果我们对您的问题有任何误解,请随时告诉我们。