我在Windows Azure上有两台运行Ubuntu 12.04LTS的机器:其中一台运行MySQL数据库,另一台运行其他需要访问数据库的进程。除了设计(这是对实际配置的减少)之外,我想知道是否可以向机器 A 分配权限以连接到机器 B 上的 MySQL 5.5 服务器,在 mysql.user 表中分配其 DNS 名称。
举个简单的例子:
机器 A
Runs: application code, webserver
DNS: machineA.cloudapp.net
PUBLIC VIRTUAL IP ADDRESS: 123.456.789.012
INTERNAL IP ADDRESS: 1.2.3.4
机器 B
Runs: MySQL server 5.5
DNS: machineB.cloudapp.net
PUBLIC VIRTUAL IP ADDRESS: 098.765.432.109
INTERNAL IP ADDRESS: 4.3.2.1
从每台机器上我无法 ping 另一台机器,但是
user@machineA:~$ ping machineB.cloudapp.net
正确解析计算机 B 的公共虚拟 IP 地址。
在机器B上,我执行了以下命令:
- 连接到 MySQL 服务器
- 使用MySQL
- 授予在 上使用 . 到由"密码"标识的"用户"@"机器A.cloudapp.net";
- 将 db_name.* 上的所有权限授予"用户"@"machineA.cloudapp.net";
- 刷新权限
当我尝试从机器 A 连接到机器 B 的数据库时,我得到以下结果:
ERROR 1130 (HY000): Host [123.456.789.012] is not allowed to connect to this MySQL server
如果我将"user'@'machineA.cloudapp.net'替换为'user'@'123.456.789.012',它会一直工作到重新启动。Azure 的虚拟机 IP 不是静态的,因此我无法在用户表中绑定特定地址。
我能做什么?
在当前配置中,如果通过云服务公开的公共 IP 地址路由流量,则需要支付数据费用。 创建虚拟网络,分配自己的专用 IP 地址范围,然后运行自己的内部 DNS。 如果任一计算机重新启动,则应始终为其重新分配旧的 IP 地址(假设在此期间没有其他任何操作被关闭或打开)。 将两台计算机放在单个云服务中。