【AWS】RDSからdumpファイルを作成し、別のRDSにインポートする方法

最近背中が痛い、mizkyです。

諸事情により、WordPress用に使用していたAWSのRDSのデータを別のRDSに移行する機会があったので、その手順を忘れないように記載したいと思います。

なお、使用DBはMySQLです。

作業手順

作業手順は以下の通りです。

  1. 旧RDSからdumpファイルを作成する。
  2. 作成したdumpファイルを移行先の新RDSにインポートする。

1-1. 旧RDSからdumpファイルを作成する。

以下のコマンドでdumpファイルを作成します。

mysqldump -h [旧RDSのエンドポイント] -u [ユーザー名] -P [ポート番号] -p [データベース名] > dump.sql

エンドポイントは以下の画像のように、AWSのRDS > データベースから対象のDBを指定して確認することができます。

aws-rds-endpoint

今回、私が上記のコマンドを実行したところ、以下のような警告が発生しました。

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の情報に更新して、作業完了です。

コメント

タイトルとURLをコピーしました