WordPressのDBをAmazon RDSに移行

Amazon RDS作成

[Amazon RDS] > [Create database]

任意のデータベースを選択(今回はMySQL)。

無料枠で使うなら無料枠にチェックをいれて、次へをクリック。

インスタンスの仕様は使いたいものを選択。

マルチAZ配置も使いたければ選択(無料枠不可)。

ストレージタイプや容量などを適当に設定(無料枠固定)。

DBインスタンス識別子、マスターユーザの名前、マスターパスワードとパスワードの確認を適当に設定。

次へをクリックし、ネットワークとセキュリティを設定します。
このときセキュリティグループで接続するEC2のIPを許可している必要があります。

「既存のセキュリティグループの選択」は使いたいものがある場合に選択、新しく設定する場合は新規で作ってください。

データベースの設定は、移行の場合必要ないので特に設定しなくて大丈夫です。

暗号化も必要なら選択(無料枠不可)。

バックアップとモニタリングも適当に設定。  

ログのエクスポート、メンテナンスも適当です。
最後にCreate databaseをクリックして作成完了です。  

Amazon RDSの設定は、ほとんど見て必要なものを設定していく感じだけなので楽です!  

[Amazon RDS] > [インスタンス]から作成したものを選択すると、詳細から設定した情報がみれます。

WordPressのDBをAmazon RDSに移行

以下を移行元サーバで実行すればAmazon RDSにデータベースがコピーされます。

※VPC外部から通信したい場合はパブリックアクセス可能にしておかないとできないので変更してください

mysqldump -u [移行元サーバのDBユーザ名] \
    --databases [データベース名] \
    --single-transaction \
    --compress \
    --order-by-primary \
    -p[パスワード] | mysql -u [Amazon RDS マスターユーザ名] \
    --port=[Amazon RDS ポート] \
    --host=[エンドポイント(詳細から確認できる)] \
    -p[Amazon RDS マスターパスワード]

以下でAmazon RDSのデータベースにリモートログイン。

mysql -u[Amazon RDS マスターユーザ名] -p[Amazon RDS マスターパスワード] -h[エンドポイント]

以下を実行して、移行元のデータベースがコピーされていればデータの移行は完了。

show databases;

wp-config.phpの修正

次は、WordPressのwp-config.phpを修正して、Amazon RDSを読み込む、書き込むようにします。

初期インストールで行う場合は、上記(データベースの設定は移行の場合必要ないので特に設定しない)部分で初期データベースを作成して、それを初期設定画面で入力、ホストに[エンドポイント]を設定すれば勝手にAmazon RDSを使ってくれます。

移行の場合は以下を修正します。

wp-config.php

修正前

/** MySQL データベースのユーザー名 */
define('DB_USER', '移行元ユーザ名');

/** MySQL データベースのパスワード */
define('DB_PASSWORD', '移行元パスワード');

/** MySQL のホスト名 */
define('DB_HOST', '移行元ホスト');

修正後

/** MySQL データベースのユーザー名 */
define('DB_USER', 'マスターユーザ名');

/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'マスターパスワード');

/** MySQL のホスト名 */
define('DB_HOST', 'エンドポイント');

以前のユーザ、パスワードを使いたい場合

修正前と同じパスワードやユーザを使いたい場合は、Amazon RDSのデータベースに上記で紹介した方法でリモートログインし、以下を実行します。

create user '[使いたいユーザ名]'@'localhost' identified with mysql_native_password by '[使いたいパスワード]';
grant all privileges on [コピーしたデータベース名].* TO '[先程追加したユーザ名]'@'localhost';
flush privileges;

この場合、wp-config.phpの「MySQLのホスト名」を変更するだけで大丈夫です!

/** MySQL のホスト名 */
define('DB_HOST', 'エンドポイント');

これでAmazon RDSへの移行は完了です。

データベース接続エラーの場合はwp-config.phpの設定が間違っているか、Amazon RDSにデータベースがコピーできていないことが原因だと思います。