データベースサーバーにはプライベートIPアドレスしかありません。アプリケーションサーバーからデータベースサーバーにSSH接続できます。アプリサーバーのIPアドレスを使用してユーザーを作成しました。
誰かがubuntu 16.04でdbサーバーのプライベートIPアドレスを使用してアプリサーバーからmysqlデータベースにアクセスする方法を教えてもらえますか?
Mysqlサーバーはループバックアドレス(127.0.0.1または同等のipv6)にバインドされている可能性が高いため、LANネットワークまでそれを開く必要があります。これは、mysqlサーバーで次のコマンドを使用して確認できます。
# netstat -lntp | grep 3306
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 20080/mysqld
Ipにバインドするためのそのオプションは、my.cnf
、またはmysql構成ファイルがシステム上にある場所で構成され、すべてのipにバインドするように変更できます。
[mysqld]
bind-address = 127.0.0.1
への変更
[mysqld]
bind-address = 0.0.0.0
mysqlサーバーを再起動します。明らかに、mysqlサーバーで権限が正しく設定されていることを確認することが重要です。
設定ファイルが存在する場所は、使用しているmysqlのバージョンによって異なります。 mysql-server-core-5.7を実行しているUbuntu 16.04.3の/etc/mysql/mysql.conf.d/mysqld.cnf
は別のCentOSボックスの/etc/my.cnf
にあるので、現在の環境についてより具体的にする必要があるかもしれません...
Mysql-clientを使用してアプリサーバーからdbサーバーのプライベートIPに接続することで、機能しているかどうかをテストできます
# echo "show databases;" | mysql -uroot -psomepass -h localhost
Database
information_schema
wp_is_annoying_db
mysql
performance_schema
sys
dbサーバーのプライベートIPアドレスをpingします。
$ ping 192.168.x.x
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.051 ms
telnetまたはnetcatを使用してポートをテストする
$ telnet localhost 3306
Trying 127.0.0.1...
Connected to localhost.
または、telnetがインストールされていない場合はnetcatを使用します。
nc -v localhost 3306
Connection to localhost 3306 port [tcp/mysql] succeeded!
アプリサーバーからデータベースサーバーにping/telnet/ncを実行してみます。これでdbサーバーに接続できない場合。ファイアウォールを無効にします(ファイアウォールブロックである必要があり、それは私用でした!)