0
0

MySQLリモートアクセスに関する設定方法とサーバー間の通信について

Last updated at Posted at 2024-09-04

アジェンダ

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の設定を変更します。

  1. DBサーバーにSSH接続

    ssh -i ~/.ssh/key.pem ubuntu@<DBサーバーのパブリックIPまたはプライベートIP>
    
  2. MySQL設定ファイルを編集
    Ubuntuや他のLinuxシステムの場合、設定ファイルは通常 /etc/mysql/mysql.conf.d/mysqld.cnf にあります。

    sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
    
  3. bind-addressを変更
    デフォルトでは、MySQLはローカルホスト(127.0.0.1)にバインドされています。これを変更して、全てのIPアドレスからアクセスを許可するように設定します。

    bind-address = 0.0.0.0
    
  4. MySQLを再起動
    設定を保存した後、MySQLを再起動して設定を反映させます。

    sudo systemctl restart mysql
    

手順2: MySQLユーザーにリモートアクセスを許可

MySQLは接続元のホストを指定してアクセスを制限しています。リモートから接続できるようにするには、MySQLのユーザーに対してリモートアクセスの許可を与える必要があります。

  1. MySQLシェルにログイン
    DBサーバー上でMySQLの管理者ユーザー(root)としてログインします。

    sudo mysql -u root -p
    
  2. リモートアクセス可能なユーザーを作成
    Webサーバーから接続できるように、ホスト部分を%に設定して新しいユーザーを作成します。%は任意のホストからのアクセスを許可することを意味します。

    CREATE USER 'webuser'@'%' IDENTIFIED BY 'your_password';
    GRANT ALL PRIVILEGES ON *.* TO 'webuser'@'%';
    FLUSH PRIVILEGES;
    

これで、webuserというユーザーが任意のホストからMySQLにアクセスできるようになります。

手順3: セキュリティグループの設定

AWS EC2インスタンスを使用している場合、セキュリティグループでMySQLのデフォルトポートである3306を開放する必要があります。

  1. AWSマネジメントコンソールにログインし、DBサーバーインスタンスに関連付けられているセキュリティグループを確認します。
  2. インバウンドルールを設定し、ポート3306をWebサーバーのIPアドレスまたは任意のアクセス元から許可します。

例:

  • ポート: 3306
  • ソース: WebサーバーのプライベートIP または 0.0.0.0/0(任意のIPアドレス)

手順4: ファイアウォール(UFW)設定の確認

もしDBサーバーでファイアウォールが有効になっている場合、ポート3306がブロックされている可能性があります。ファイアウォール設定を確認し、必要に応じてポートを開放します。

  1. ファイアウォールの状態を確認

    sudo ufw status
    
  2. ポート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にアクセスできるようになります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0