アジェンダ
MySQLのリモートアクセスに関する設定方法と、WebサーバーとDBサーバー間での通信を行うために必要な基本的な概念についてまとめます。リモートアクセスを許可するための手順を理解し、サーバー間の正しい通信設定を行うことを目標にしております。
MySQLのリモートアクセスとは?
MySQLはデフォルトではセキュリティの観点から、ローカルホスト(localhost) からのアクセスしか許可していません。しかし、複数のサーバー間でデータベースを操作する場合、MySQLへのリモートアクセスを許可する必要があります。
たとえば、Webサーバー から DBサーバー にアクセスしてデータベースを操作する場合、DBサーバーのMySQL設定を変更してリモートアクセスを許可し、WebサーバーがMySQLに接続できるようにします。
サーバーの役割の理解
リモートアクセスの設定を理解するには、まず Webサーバー と DBサーバー の役割を明確にすることが重要です。
- Webサーバー: ブラウザからのリクエストを受け取り、データベースからデータを取得したり、ユーザーの入力を保存する役割を持つ。
- DBサーバー: MySQLなどのデータベースがインストールされ、データの管理を行うサーバー。Webサーバーからのリクエストに応じてデータの読み書きを行う。
これら2つのサーバーが正しく通信するためには、DBサーバーでMySQLの設定を変更し、Webサーバーからのアクセスを許可する必要があります。
MySQLリモートアクセスを許可するための基本的な手順
手順1: MySQL設定ファイル(mysqld.cnf
)の編集
DBサーバーにSSHで接続し、MySQL設定ファイルを編集してリモートアクセスを許可します。具体的には、bind-address
の設定を変更します。
-
DBサーバーにSSH接続:
ssh -i ~/.ssh/key.pem ubuntu@<DBサーバーのパブリックIPまたはプライベートIP>
-
MySQL設定ファイルを編集:
Ubuntuや他のLinuxシステムの場合、設定ファイルは通常/etc/mysql/mysql.conf.d/mysqld.cnf
にあります。sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
-
bind-address
を変更:
デフォルトでは、MySQLはローカルホスト(127.0.0.1
)にバインドされています。これを変更して、全てのIPアドレスからアクセスを許可するように設定します。bind-address = 0.0.0.0
-
MySQLを再起動:
設定を保存した後、MySQLを再起動して設定を反映させます。sudo systemctl restart mysql
手順2: MySQLユーザーにリモートアクセスを許可
MySQLは接続元のホストを指定してアクセスを制限しています。リモートから接続できるようにするには、MySQLのユーザーに対してリモートアクセスの許可を与える必要があります。
-
MySQLシェルにログイン:
DBサーバー上でMySQLの管理者ユーザー(root
)としてログインします。sudo mysql -u root -p
-
リモートアクセス可能なユーザーを作成:
Webサーバーから接続できるように、ホスト部分を%
に設定して新しいユーザーを作成します。%
は任意のホストからのアクセスを許可することを意味します。CREATE USER 'webuser'@'%' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON *.* TO 'webuser'@'%'; FLUSH PRIVILEGES;
これで、webuser
というユーザーが任意のホストからMySQLにアクセスできるようになります。
手順3: セキュリティグループの設定
AWS EC2インスタンスを使用している場合、セキュリティグループでMySQLのデフォルトポートである3306
を開放する必要があります。
- AWSマネジメントコンソールにログインし、DBサーバーインスタンスに関連付けられているセキュリティグループを確認します。
-
インバウンドルールを設定し、ポート
3306
をWebサーバーのIPアドレスまたは任意のアクセス元から許可します。
例:
- ポート:
3306
- ソース:
WebサーバーのプライベートIP
または0.0.0.0/0
(任意のIPアドレス)
手順4: ファイアウォール(UFW)設定の確認
もしDBサーバーでファイアウォールが有効になっている場合、ポート3306
がブロックされている可能性があります。ファイアウォール設定を確認し、必要に応じてポートを開放します。
-
ファイアウォールの状態を確認:
sudo ufw status
-
ポート3306を許可:
sudo ufw allow 3306 sudo ufw reload
サーバー間通信の流れ
これで、DBサーバーはWebサーバーからの接続を受け入れる準備が整いました。リモートからMySQLに接続するには、Webサーバーから次のコマンドを実行します。
mysql -h <DBサーバーのプライベートIP> -u webuser -p
パスワードを入力すると、WebサーバーからDBサーバー上のMySQLに接続できるはずです。
まとめ
-
MySQLのリモートアクセス設定:
bind-address
を変更し、リモートアクセスを許可する。 - MySQLユーザーのホスト指定: MySQLユーザーをリモートから接続可能に設定する。
-
セキュリティグループとファイアウォールの設定: ポート
3306
を許可して、外部からのアクセスを許可する。
この設定を行うことで、WebサーバーとDBサーバー間の通信が可能になり、リモートからMySQLにアクセスできるようになります。