既存のMySQLサーバからRDSインスタンスへの移行をテストする

記事タイトルとURLをコピーする



こんにちはインフラエンジニアの柳瀬です。
今回の内容は少しエントリー向けの内容になるかと思いますが、既存環境のMySQLからRDSへ移行するテストについて記載したいと思います。
オンプレミスの環境でMySQLを使用されている方は多くいらっしゃるかと思いますが、そういった方がRDSへ移行される事を検討した際に何かしらの参考になりましたら幸いです。

今回はEC2上のCentOSにMySQLをインストールして10GBのテストデータを投入しました。
こちらのデータをRDSに移行したいと思います。
※RDSデータベースの作成方法はこちらのリンクをご覧頂けると分かりやすいと思います。

まず考える事がmysqldumpコマンドの--all-databasesオプションを使用して一気に移行する事ですね!
これを実施すると以下のようになります。

# mysqldump -u root -x --all-databases > dump.sql
# mysql -h swx-dbinstance.cuqlmsanjyh6.ap-northeast-1.rds.amazonaws.com -u swx -p < dump.sql
Enter password:
ERROR 1044 (42000) at line 22: Access denied for user 'swx'@'%' to database 'mysql'

RDS作成時に作成した管理ユーザがmysqlデータベースにアクセス出来ずにリストアに失敗します。
--all-databasesオプションを使用したdumpからのリストアはmysqlのシステム全体がリストアされるからです。
そのため、RDS移行時はこのようにDBを指定して個別にバックアップ&リストアする手順になりそうです。
この場合は移行前に作成したMySQLのユーザやパスワード情報は引き継がれませんので、ご注意ください。
また、リストア先のDBも事前に作成する必要があります。

# mysql swxdb -u swx -h swx-dbinstance.cuqlmsanjyh6.ap-northeast-1.rds.amazonaws.com -p
mysql> create database sample;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| innodb             |
| mysql              |
| sample             |
| swxdb              |
+--------------------+
5 rows in set (0.00 sec)

# mysqldump -u root sample > sample-dump.sql
# mysql -h swx-dbinstance.cuqlmsanjyh6.ap-northeast-1.rds.amazonaws.com -u swx -p sample < sample-dump.sql

ちなみにDBのサイズが大きく、2段階に分けて移行を行いたい場合はバイナリログを使用した差分リストアが有効かもしれません。
こちらもリストア時にオプションにデータベースを指定する事でリストアが可能です。

# mysqlbinlog  -d sample /var/lib/mysql/mysql-bin.000021 > recover.sql
# mysql -h swx-dbinstance.cuqlmsanjyh6.ap-northeast-1.rds.amazonaws.com -u swx -p < recover.sql

大容量サイズのデータベースの場合は一度にリストアする事が難しいので、このような差分リストアも検討した方が良さそうです。