リモートMySQLデータベースを設定してWordPressのパフォーマンスを最適化する方法

MYSQLチュートリアル

はじめに

アプリケーションやウェブサイトが成長すると、現在のサーバー構成では十分でなくなる時がくるかもしれません。もしウェブサーバーとデータベースを同じマシンでホストしている場合、それぞれの役割を別々のハードウェアに分け、訪問者のリクエストに対する負荷を分散させるのが良いアイデアかもしれません。

このガイドでは、ウェブアプリケーションが接続できるリモートMySQLデータベースサーバーを設定します。例としてWordPressを使用しますが、この技術はMySQLをバックエンドに使用している任意のアプリケーションにも広く適用可能です。

前提条件

このチュートリアルを始める前に、以下のものが必要です:

  • 2台のUbuntuサーバー。各サーバーには、sudo権限を持つ非rootユーザーが設定され、UFWファイアウォールが有効になっている必要があります。1台はMySQLをホストするデータベースサーバー、もう1台はリモートで接続するウェブサーバーとして使用します。
  • データベースサーバーには、MySQLがインストールされている必要があります。インストール手順については、How To Install MySQL on Ubuntuを参照してください。
  • ウェブサーバーには、NginxとPHPがインストールされている必要があります。手順はHow To Install Linux, Nginx, MySQL, PHP (LEMP stack) on Ubuntuに記載されていますが、MySQLをインストールするStep 2はスキップしてください。
  • オプションですが、Let’s EncryptからTLS/SSL証明書をウェブサーバーにインストールすることを強く推奨します。証明書自体は無料で取得でき、How To Secure Nginx with Let’s Encrypt on Ubuntuを参考にできます。

ステップ 1 — データベースサーバーでリモート接続を許可するためのMySQL設定

データを別のサーバーに保存することで、一台のマシン構成のパフォーマンス上限に達した後、スムーズに拡張することが可能になります。これにより、将来的にはロードバランシングやさらなるインフラ拡張も可能になります。MySQLをインストールした後、他のコンピュータからの接続を許可するために、いくつかの設定値を変更する必要があります。

MySQLサーバーの設定は、通常/etc/mysql/mysql.conf.d/ディレクトリにあるmysqld.cnfファイルで行います。このファイルを開いて、設定を編集します:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

このファイルは、[セクション名] で区切られたセクションで構成されています。mysqldというラベルのセクションを見つけます:

/etc/mysql/mysql.conf.d/mysqld.cnf
. . .
[mysqld]
. . .

このセクション内で、bind-addressというパラメータを探します。これは、データベースがどのネットワークアドレスで接続を待ち受けるかを指定します。

デフォルトでは127.0.0.1に設定されており、MySQLがローカル接続のみを受け入れるように構成されています。これを、サーバーが到達可能な外部IPアドレスに変更します。

/etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
. . .
bind-address = db_server_ip

インターネット経由でデータベースに接続する場合、データを保護するために暗号化された接続を要求することをお勧めします。暗号化されていないMySQL接続では、ネットワーク上の第三者がウェブサーバーとデータベースサーバー間の通信を盗聴する可能性があります。MySQL接続を暗号化するには、bind-address行の後に以下の行を追加します:

/etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
. . .
require_secure_transport = on
. . .

設定を保存して終了します。次に、SSL接続が有効になるように、必要なキーと証明書を生成します。以下のコマンドを実行して、これらのファイルを作成します:

sudo mysql_ssl_rsa_setup --uid=mysql

MySQLの設定を更新し、SSL情報を読み込ませるために、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;

次に、ローカル専用ユーザーと、ウェブサーバーからリモートで接続するためのユーザーを作成します。まず、ローカルユーザーを作成します:

CREATE USER 'local_db_user'@'localhost' IDENTIFIED BY 'password';

次に、このユーザーにWordPressデータベースへのアクセス権を付与します:

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

次に、ウェブサーバーからリモート接続をテストします:

mysql -u remote_user -h db_server_ip -p

これで、接続がSSLで保護されているかを確認するために、MySQLプロンプトで次のコマンドを実行します:

status

ステップ 4 — WordPressのインストール準備

ウェブサーバーでWordPressをインストールする準備を行います。まず、必要なPHP拡張をインストールします:

sudo apt install php-curl php-gd php-intl php-mbstring php-soap php-xml php-xmlrpc php-zip

次に、Nginxのサーバーブロックファイルを設定します。詳細な手順は省略しますが、WordPressのインストールに必要な設定を追加し、Nginxを再起動します:

sudo systemctl reload nginx

ステップ 5 — WordPressのインストール

次に、WordPressをダウンロードし、サーバーのドキュメントルートにコピーします:

curl -LO https://wordpress.org/latest.tar.gz
tar xzvf latest.tar.gz
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

データベース名、ユーザー名、パスワード、およびリモートサーバーのIPアドレスを設定し、SSL接続を有効にします:

/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 — WordPressのWebインターフェースを使用したセットアップ

ブラウザでWordPressのセットアップページにアクセスし、設定を完了します:

http://your_domain.com/wp-admin

WordPressの設定を行い、管理者アカウントを作成します。

まとめ

このチュートリアルを通じて、リモートMySQLデータベースをセットアップし、SSL接続でWordPressと連携させる方法を学びました。この手順は、MySQLをバックエンドに使用する任意のウェブアプリケーションに適用可能です。

購読
通知
0 Comments
Inline Feedbacks
View all comments