MySQLサーバーを備えたUbuntuシステムを保持するAzure仮想マシンがあり、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は、10.78.28.85
である「内部IPアドレス」も教えてくれます。 MySQLサーバーをそのアドレスと0.0.0.0
にバインドしようとしましたが、どれも機能しませんでした。
問題はサーバー内の特定のインスタンスにアクセスするために行われたリダイレクトにあると思われますが、それを解決する方法がわかりません。
私はついにそれを解決しました。問題は、Azureにエンドポイントがないことでした。
3306
ポートでエンドポイントを作成し、Sudo restart mysql
でmysql-serverを再起動しました
私が持っていた他の間違いは、バインドアドレスをサーバーの内部IPアドレスとして設定する必要があったことです。
エンドポイントだけでは不十分です。この問題を解決するのに4時間を費やしました。また、サーバーにMySqlポートのファイアウォールルールがあることを確認する必要があります。最も重要なのは、ルールがPUBLICであることです。