【问题标题】:Windows Azure VMs: Connection Timeout to Remote MySQL DatabaseWindows Azure VM:远程 MySQL 数据库的连接超时
【发布时间】:2015-09-18 18:47:26
【问题描述】:

我在使用 Windows Azure 时遇到了一个独特的问题,这是我在其他提供商上看不到的。我一直在运行从远程 VM 到在 DigitalOcean VM 上运行的 MySQL 数据库的连接。我已成功连接 AWS、Rackspace、Google 和所有其他提供商,但出于某种原因,Microsoft Azure VM 似乎无法正常工作。

虚拟机操作系统:Ubuntu 14.04

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

我的尝试:

  1. 端口已打开并正在侦听
  2. 用户绝对有权限将数据上传到数据库(与该用户的其他远程连接都可以正常工作)。
  3. 我什至尝试过为 Windows Azure VM 上的防火墙“禁用 ufw”
  4. 我已将 3306 设置为 Azure VM 上的端点

尽管我进行了所有尝试,但仍无法建立连接。我在设置中缺少什么吗?

【问题讨论】:

  • 主机在哪里? Azure VM 是 MySQL 主机吗?目前尚不清楚您是尝试从工作站连接到 Azure VM 中的 MySQL,还是 Azure VM 是在 Azure 数据中心外使用 MySQL 访问 VM 的客户端。
  • @BrunoFaria MySQL 主机位于 DigitalOcean。

标签: python mysql azure azure-virtual-machine


【解决方案1】:

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

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

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

为了解决这个问题,我关注了this post,在托管 MySQL 服务器的 VM.1 中创建了一个 SSH 隧道:

  • 打开 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

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

【讨论】:

  • 嘿,加里,感谢您提供此信息。看来 SSH 隧道将是一个很好的解决方案,之前应该想到过......我只是坚持认为我可能错过了启用 MySQL 连接的一些东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-19
  • 2011-12-06
相关资源
最近更新 更多