我有一个装有 Ubuntu 系统的 Azure 虚拟机,其中装有 MySQL 服务器,我想从 Web 应用程序访问数据库。安装 mysql-server 后,我执行了
$ iptables -I INPUT -p tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
$ iptables -I OUTPUT -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT
允许 tcp 连接。在文件中/etc/mysql/my.cnf
我添加了bind-address = 168.63.178.87
Azure 面板告诉我的“虚拟 IP 地址”。
在 mysql 中,我用来连接的用户对所需的数据库拥有所有权限(我认为):
mysql> SHOW GRANTS FOR 'user'@'%';
+-------------------------------------------------------------------------------------------------------------------+
| Grants for user@% |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY PASSWORD 'pass_ommited' |
| GRANT ALL PRIVILEGES ON `database`.* TO 'user'@'%' |
+-------------------------------------------------------------------------------------------------------------------+
但是当应用程序尝试连接数据库时,我收到错误:
CDbConnection failed to open the DB connection: SQLSTATE[HY000] [2003] Can't connect to MySQL server on '168.63.178.87' (4)
(如果重要的话,它是一个 Yii 框架应用程序)。
我使用给定的 IP 地址和特定端口对虚拟机具有完全 SSH 访问权限。 Azure 还告诉我“内部 IP 地址”,即10.78.28.85
。 我尝试将 MySQL 服务器绑定到该地址和0.0.0.0
,但均未奏效。
我怀疑问题在于访问服务器中的特定实例时进行的重定向,但我不知道如何解决它。
答案1
我终于解决了。问题是我在 Azure 中没有端点。
我已经创建了带有端口的端点3306
,并使用以下命令重新启动了 mysql-serversudo restart mysql
我犯的另一个错误是我需要将绑定地址设置为服务器的内部 IP 地址。
答案2
Endpoint 不够用!刚刚花了 4 个小时解决这个问题。您还需要验证您的服务器是否有针对 MySql 端口的防火墙规则,最重要的是,该规则是 PUBLIC: