アプリケーションやウェブサイトが成長するにつれて、現在のサーバー構成では対応しきれない場合があります。ウェブサーバーとデータベースのバックエンドを同じマシンでホスティングしている場合、これらの機能を分離し、それぞれが独自のハードウェアで動作できるようにすると、訪問者のリクエストに応答する負荷を分散させることができます。
このガイドでは、リモートMySQLデータベースサーバーを設定し、ウェブアプリケーションがそのサーバーに接続できるように構成します。例としてWordPressを使用しますが、この手法はMySQLをバックエンドとして使用する他のアプリケーションにも広く適用可能です。
前提条件
このチュートリアルを始める前に、以下のものが必要です:
- 2台のUbuntuサーバー:
- データベースサーバー: MySQLをホスティングします。
- ウェブサーバー: ウェブアプリケーションをホスティングし、リモートMySQLデータベースに接続します。
- インストール済みのソフトウェア:
- データベースサーバー: MySQL(MySQLインストールガイドを参照)。
- ウェブサーバー: Nginx, PHP(LEMPスタックガイドを参照)。
ステップ1 — データベースサーバーでMySQLをリモート接続用に構成する
アプリケーションの規模が大きくなると、1台のマシンで全ての役割を果たすのが難しくなることがあります。その場合、データベースを別のサーバーに移すのは、パフォーマンスの向上と将来的なインフラ拡張のための基本的な構成を提供する良い方法です。
MySQLをインストールした後、他のコンピューターからの接続を許可するために、いくつかの設定を変更する必要があります。これらの設定変更のほとんどは、mysqld.cnf
ファイルで行います。このファイルは通常、/etc/mysql/mysql.conf.d/
ディレクトリにあります。
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
このファイルには、[mysqld]
というセクションがあります。このセクション内のbind-address
パラメータを見つけます。このパラメータは、MySQLが接続を待機するネットワークアドレスを指定します。
デフォルトでは、127.0.0.1
に設定されており、MySQLはローカル接続のみを受け入れるように構成されています。これを、サーバーの外部IPアドレスに変更します。
[mysqld] . . . bind-address = db_server_ip
次に、MySQL接続を暗号化してデータを安全に保つために、以下の行をbind-address
の後に追加します。
[mysqld] . . . require_secure_transport = on . . .
ファイルを保存して閉じた後、MySQLが新しい設定を読み込むように、データベースを再起動します。
sudo systemctl restart mysql
次に、MySQLが外部インターフェースでリッスンしていることを確認するために、以下のコマンドを実行します。
sudo ss -plunt | grep mysqld
これで、MySQLがリモート接続を受け入れるようになりました。
ステップ2 — データベースサーバーでWordPress用のデータベースとリモート認証情報を設定する
次に、WordPress用のデータベースと、リモートアクセスが可能なユーザーを作成します。まず、MySQLにroot
ユーザーとしてログインします。
sudo mysql
新しいデータベースを作成します。ここでは、wordpress
という名前で作成します。
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
次に、ローカル専用のユーザーlocal_db_user
と、リモートアクセス用のユーザーremote_user
を作成し、それぞれの権限を設定します。
CREATE USER 'local_db_user'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON wordpress.* TO 'local_db_user'@'localhost'; CREATE USER 'remote_user'@'web_server_ip' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON wordpress.* TO 'remote_user'@'web_server_ip'; FLUSH PRIVILEGES;
これで、リモートアクセスが可能なユーザーが設定されました。
ステップ3 — リモートおよびローカル接続のテスト
設定が完了したら、データベースサーバーとウェブサーバーから接続をテストします。まず、ローカル接続をテストします。
mysql -u local_db_user -p
次に、ウェブサーバーからリモート接続をテストします。
ssh remote_user@web_server_ip sudo apt update sudo apt install mysql-client mysql -u remote_user -h db_server_ip -p
この接続が成功すると、リモートでMySQLにアクセスできるようになります。
ステップ4 — WordPressインストールのためのウェブサーバー準備
WordPressとそのプラグインを使用するために、必要なPHP拡張機能をインストールします。
sudo apt install php-curl php-gd php-intl php-mbstring php-soap php-xml php-xmlrpc php-zip sudo systemctl restart php7.4-fpm
次に、Nginxの設定ファイルを更新します。
sudo nano /etc/nginx/sites-available/your_domain
ファイルに以下のような設定を追加し、保存して閉じます。
server { server_name your_domain www.your_domain; root /var/www/your_domain; index index.html index.htm index.php; location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { log_not_found off; access_log off; allow all; } location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ { expires max; log_not_found off; } location / { try_files $uri $uri/ /index.php$is_args$args; } }
設定ファイルのシンタックスをテストし、Nginxを再読み込みします。
sudo nginx -t sudo systemctl reload nginx
ステップ5 – ウェブサーバーにWordPressをインストールする
WordPressの最新バージョンをダウンロードしてインストールします。
cd /tmp curl -LO https://wordpress.org/latest.tar.gz tar xzvf latest.tar.gz cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php sudo cp -a /tmp/wordpress/. /var/www/your_domain sudo chown -R www-data:www-data /var/www/your_domain
ステップ6 — WordPressの設定ファイルをセットアップする
WordPress設定ファイルを開き、データベース接続情報を入力します。
sudo nano /var/www/your_domain/wp-config.php
データベースの名前、ユーザー、パスワード、そしてホスト名を以下のように設定します。
define('DB_NAME', 'wordpress'); define('DB_USER', 'remote_user'); define('DB_PASSWORD', 'remote_user_password'); define('DB_HOST', 'db_server_ip'); define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
設定を保存して閉じます。
ステップ7 — Webインターフェイスを通じてWordPressをセットアップする
ウェブブラウザで、ウェブサーバーのドメイン名に/wp-admin
を付けてアクセスし、WordPressのセットアップを完了します。
http://your_domain.com/wp-admin
結論
このチュートリアルでは、リモートMySQLデータベースを設定し、SSLで保護された接続を使用してWordPressインストールと連携させる方法を学びました。この技術は、他のWebアプリケーションやプログラミング言語にも適用できますので、各アプリケーションや言語のデータベースドキュメントを参照してください。