エキサイト株式会社の武藤です。
オンプレのDBをAWSのRDSに移行する際に、AWSのDatabase Migration Service (DMS) を利用しました。 サービスの特性上読み込みが多く、書き込みが少なかったので、無停止での切り替えができました。 その手順について説明します。
前提情報として、オンプレDB はMySQL 5.5で構築されており、RDSはAurora MySQL 5.7を採用しました。
Database Migration Service とは
DBのAWS移行のために、移行元と移行先のDB間でデータ同期を行うサービスです。 データの一括移行と継続的なレプリケートが設定できるため、ダウンタイムを少なく移行が可能です。
オンプレMySQLからAurora MySQLに移行する方針であったので、下記の記事を参考にしました。
大まかな流れとしては、最初にオンプレDBからRDSにスキーマの変換を行います。 その後、オンプレからRDSに継続的なレプリケートを設定するため、オンプレDBのバイナリログ周りの設定を確認し、必要であれば変更します。 そして、レプリケーションを処理するインスタンスの作成や移行タスクを設定し、移行を実施します。
Schema Conversions Tool でスキーマを変換する
AWSで提供されているSchema Conversions Tool (SCT) を利用して、スキーマの変換を行いました。
SCTはWebの管理コンソールではなく、ローカルにツールをダウンロードします。
SCT上でソース、ターゲットのDBに接続をし、スキーマの変換を行います。
そのままRDSにスキーマを反映させることも可能ですが、変換内容を確認したかったので、一旦SQLファイルに保存して、差分比較を行いました。 今回のケースでは、下記のような差分がありました。
- カラム、テーブルのCOMMENT の削除
- MyISAMからInnoDBに変更
- KEY に USING BTREE が付与
- RDSの設定に合わせてCHARSETの変更(utf8 -> utfmb4)
- text型がmediumtext型に変更
おそらくですが、DBエンジンや設計によってどのような差分が出るか異なると思われます。 動作に影響がありそうな変更がありますので、念の為確認しておくのが良いでしょう。
オンプレDBの設定確認
DMSの参考記事には下記が示されています。
AWS DMS は1回限りのデータ移行を行うことも、データを継続的にレプリケーションすることもできます。MySQLから Amazon Aurora への移行では、まずはバルクロードを行い、それからレプリケーションまたは Change Data Capture (CDC) を実行します。変更をレプリケーションするために、DMSはソースデータベースのバイナリログファイルを読む必要があるため、ソースのMySQLデータベースのバイナリログが有効になっているという前提条件を満たしているかを確認する必要があります。
今回は、サービスの特性的に無停止で切り替えが可能だったので、継続的なレプリケーションも設定しました。 そのため、下記のMySQLの設定を確認し、適宜修正しました。
log-bin=mysql-bin
binlog_format=row
binlog_checksum=none
DMSの設定
DMSの設定にもいくつか手順があります。
レプリケーションインスタンスの作成
オンプレDBからRDSへのレプリケーションの処理を担うインスタンスを作成します。 サブネットグループと紐付ける必要があるので、こちらも適宜作成します。
エンドポイントの作成
移行元となるソース、移行先となるターゲットのエンドポイントを設定します。
それぞれに識別するための名前や、DBホスト名、ユーザ、パスワード等の接続情報を設定します。
移行タスクの作成
作成したレプリケーションインスタンス、エンドポイントを設定します。
移行タイプに「既存のデータを移行して、継続的な変更をレプリケートする」を指定します。
移行タスクの詳細を設定します。
移行タスクを開始して、オンプレDBからRDSに変更がレプリケートされる状態となりました。
移行スケジュール
DMSの設定が完了して、実際にアプリケーションの向き先をオンプレからRDSへと変更します。
まずは、読み込みが多いアプリケーションから向き先をRDSに変更しました。1日ほど経過を見て問題が起きていないか等を確認します。
次に、書き込みが発生するアプリケーションの向き先をRDSに変更します。適宜、社内運用ツールやバッチを停止して行います。
その後、書き込み動作等を確認して問題なければ完了です。
最後に
DMSの使ったDBのAWS移行について、実際に行った流れを説明しました。 AWSで提供されているSCT、DMSのおかげで独自に移行方法を確立する必要がなく、便利なツールだと思います。 参考になれば幸いです。