概要
手がけているサービスのコスト削減のため、AWS RDSのMySQLからAuroraへの乗り換えを行いたいと思い、移行方法の調査を行いました。
DMSを使って移行
Databese Migration Serviceという、異なるデータベース間でのMigrationを助けてくれるサービス。MigrationとOn going replication両方行ってくれるので、Downtimeを少なく移行できます。
上記のクラスメソッドさんの記事を参考にぽちぽちやってみました。
Migrationとreplicationもうまくいき、意気揚々をアプリにつないで動作確認をしてみたところ、、、
う、うごかない。
ログを見ると
Field id doesn't have a default value
というエラー。どうやらDBにAuto incrementの設定がなされていなく、idを指定しろと怒られているようです。よく見るとcollationやindexも移行されていません。仕方なく、MySQL workbenchでstructreを事前にexportしておき、AuroraにimportしたのちにDMSを使用したところ、うまくいきました!
そのごいろいろ調べた挙句下記を読んでみると
むむ、事前にSchema Conversion Toolをつかって、移行準備を整えた後、DMSで移行するだと?
こちらが正規の手順のようですね。
早速PCにインストールして使ってみましたが、よくよく考えればSecurity groupを絞っているのでPCからDBに直接繋げないし(踏み台サーバー経由できるかもしれませんが未調査)何より学習コスト高そう。私は別の方法を探しました。
SnapShotから移行
RDSのコンソールのSnapshot一覧のページから復元したいスナップショットを選び、上の方のMigrate snapshotを選びます。
その後DBの設定を行い(執筆日現在でAuroraしか選べません)、Auroraを立ち上げます。
簡単!完了!
Auroraが立ち上がり使えるようになるまでには多少時間がかかります。
結論
あまり手作業が多いとバグを発生させる要因になるので、今回はメンテ時間を設けて、SnapshotをとりSnapshotから移行することにしました。
Downtimeを最小にしたいというモチベーションが強いミッションクリティカルなサービスであればちゃんと準備をしてDMSを使うのもアリだと思います。
より良さげな方法が見つかれば追記します。