最近背中が痛い、mizkyです。
諸事情により、WordPress用に使用していたAWSのRDSのデータを別のRDSに移行する機会があったので、その手順を忘れないように記載したいと思います。
なお、使用DBはMySQLです。
作業手順
作業手順は以下の通りです。
- 旧RDSからdumpファイルを作成する。
- 作成したdumpファイルを移行先の新RDSにインポートする。
1-1. 旧RDSからdumpファイルを作成する。
以下のコマンドでdumpファイルを作成します。
mysqldump -h [旧RDSのエンドポイント] -u [ユーザー名] -P [ポート番号] -p [データベース名] > dump.sql
エンドポイントは以下の画像のように、AWSのRDS > データベースから対象のDBを指定して確認することができます。

今回、私が上記のコマンドを実行したところ、以下のような警告が発生しました。
Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don't want to restore GTIDs, pass --set-gtid-purged=OFF. To make a complete dump, pass --all-databases --triggers --routines --events.
一旦無視して、次の手順を行います。
2. 作成したdumpファイルを移行先の新RDSにインポートする。
以下のコマンドを実行して、dumpファイルを新しいRDSにインポートします。
mysql -h [新RDSのエンドポイント] -u [ユーザー名] -P [ポート番号] -p [データベース名] < dump.sql
すると、以下のようなエラーが発生しました。
ERROR 1227 (42000) at line 18: Access denied; you need (at least one of) the SUPER, SYSTEM_VARIABLES_ADMIN or SESSION_VARIABLES_ADMIN privilege(s) for this operation
どうやら作成したdumpファイルにGTID(Global Transaction ID)に関与するコードが含まれていることが原因でした。
GTIDに関与するコードがdumpファイルに付与された理由は、使用していたRDSがマルチAZだからです。
したがって、dumpファイルを作成する際にGTIDに関与するコードを出力しないようにする必要があります。
1-2. 旧RDSからGTIDに関与するコードを取り除いてdumpファイルを作成する。
以下のコマンドで、GTIDに関与するコードを取り除いてdumpファイルを作成することができます。
mysqldump -h [ 旧RDSのエンドポイント ] -u [ ユーザー名 ] -P [ ポート番号 ] -p [ データベース名 ] --set-gtid-purged=OFF > dump.sql
そして、新RDSにdumpファイルを取り込みます。
※補足: WordPressのDB設定を変更する。
WordPressのDB設定は、wp-config.phpのMySQL 設定に記載されています。
新しいRDSの情報に更新して、作業完了です。

「mizky」で「みずき」と読みます。エンターテイナーになりたい。普段はサラリーマン(気持ちは引き篭もりニート)。アプリ開発、HP運営、投資など手広くやっております。九州大学大学院卒業。趣味は旅行、レースゲーム。
コメント