データベース移行とは?AWSでのDB移行の方法を初心者向けに解説
データベース移行とは、現在使っているデータベースのデータを、別のデータベースへ移すことです。
例えば、次のような移行があります。
- 社内サーバーのMySQLからAmazon RDS for MySQLへ
- Amazon RDS for MySQLからAmazon Aurora MySQLへ
- 既存のRDSから、別のAWSアカウントに作ったRDSへ
データをコピーするだけでなく、コピー中に発生した更新をどう扱い、いつアプリの接続先を切り替えるかまで考えます。
データベース移行とは?
移行には、移行元と移行先があります。
移行元DB
↓
データを移す
↓
移行先DB
↓
アプリの接続先を切り替える
どちらもAWS上のデータベースであっても、別のDBを新しく作ってデータを移すなら、データベース移行です。
移行元と移行先の組み合わせによって、使える方法や必要な作業は異なります。
なぜデータベースを移行するのか?
オンプレミスからクラウドへの移行
社内サーバーなどで動いているDBをAWSへ移すケースです。
社内サーバーのMySQL
↓
Amazon RDS for MySQL
この場合は、社内ネットワークからAWSへの接続方法も準備します。
AWS内でのデータベース移行
AWS内でも、DBを別の場所や製品へ移すことがあります。
例えば、既存のRDSを別のAWSアカウントやリージョンへ移す場合です。同じRDS for MySQLからRDS for MySQLへ移す場合でも、新しいDBを用意し、データの移行と接続先の切り替えが必要になります。
既存のRDS
↓
別アカウント・別リージョンのRDS
また、RDS for MySQLからAurora MySQLへ移すケースもあります。
RDS for MySQL
↓
Aurora MySQL
RDS for MySQLのスナップショットからAurora MySQLクラスターを作る方法もAWSが提供しています。ただし、スナップショット取得後に元DBへ書き込まれたデータをどう扱うかは、別途決める必要があります。
データベースのリプレイス
DB製品やバージョンを変更するケースです。
MySQLからPostgreSQLのようにDBエンジンも変わる場合は、データだけでなく、テーブル定義、データ型、アプリが実行するSQLなどの互換性も確認します。
AWS DMS Schema Conversionはスキーマの変換を支援しますが、データ自体の移行とは別の作業です。
システム更改に伴う移行
アプリを作り直す際に、新しいDBへデータを移すケースです。
移行前後でテーブル構造やデータの意味が変わるなら、単純なコピーでは済みません。どのデータをどう変換するかも決めます。
データベース移行で考えること
既存データをどう移行するか
現在保存されているデータを、どうやって移行先へ運ぶかを決めます。
方法には、DBのエクスポートとインポート、RDSのスナップショット、AWS DMSによるフルロードなどがあります。
例えば、RDSのスナップショットを復元すると、新しいDBインスタンスを作成できます。スナップショットは別リージョンへコピーすることもできます。
移行中に発生する更新をどうするか
既存データのコピー中も、元DBに新しい注文などが書き込まれる場合があります。
元DBのコピーを開始
↓
元DBに新しい注文が入る
↓
コピー済みデータだけで切り替える
↓
新しい注文が移行先にない
これを防ぐには、コピー中の書き込みを止めるか、発生した変更を移行先へ反映する必要があります。
ダウンタイムをどこまで許容できるか
アプリを長時間止められるなら、書き込みを止めて一括で移行できます。
停止時間を短くしたいなら、アプリを動かしながら既存データを移し、変更を同期する方式が候補です。ただし、最後の接続先切り替えには、書き込み停止と確認の時間を見込む必要があります。
データベースの主な移行方法
一括でデータを移行する
書き込みを止め、ある時点のデータをまとめて移す方法です。
書き込みを停止
↓
データを移行
↓
移行先を確認
↓
接続先を切り替える
エクスポートとインポートや、スナップショットを使う方法が候補になります。
データ量が多いほど、移行と確認に時間がかかります。
変更データを継続的に同期する
元DBで発生した追加・更新・削除を取得し、移行先へ反映する方法です。
この変更の取得をCDCと呼びます。正式名称はChange Data Captureで、日本語では「変更データキャプチャ」です。
元DBで変更が発生
↓
CDCで変更を取得
↓
移行先DBへ反映
CDCだけでは、すでに存在する全データを移したことにはなりません。既存データを移す作業と組み合わせて考えます。
AWS DMSとは?
AWS Database Migration Service(AWS DMS)は、DB間のデータ移行や変更の同期に使うサービスです。
AWS DMSの移行タスクには、主に次を設定します。
- 移行元DBの接続先
- 移行先DBの接続先
- 移行するテーブル
- フルロードやCDCなどの移行方式
- ログやデータ検証の設定
AWS内のDB同士を移行する場合にも利用できます。例えば、既存のRDSを移行元、新しく作ったRDSやAuroraを移行先にする構成です。
画像:AWS公式ドキュメント掲載の移行タスク作成画面。移行元、移行先、移行方式を指定します。画面表示は変更される場合があります。
AWS DMSを使ったデータベース移行
AWS DMSでは、主に次の方式を選べます。
| 方式 | 移すもの |
|---|---|
| フルロード | 既存データ |
| CDCのみ | 元DBで発生する変更 |
| フルロード + CDC | 既存データと、その間に発生する変更 |
フルロードとは?
元DBに保存されている既存データを、移行先へまとめてコピーすることです。
元DBの既存データ
↓
AWS DMSでフルロード
↓
移行先DB
フルロードだけでは、その後の更新を継続して同期しません。
CDCとは?
CDCはChange Data Captureの略です。
元DBで発生するデータの追加・更新・削除を取得し、移行先へ反映します。
元DBの変更
↓
AWS DMSが取得
↓
移行先DBへ反映
例えば、既存データを別の方法で移した後、残りの変更をAWS DMSの「CDCのみ」で同期できます。
フルロード + CDCとは?
既存データをフルロードで移しながら、元DBで発生する変更も取得する方式です。
フルロードが終わると、コピー中に蓄積した変更を移行先へ反映し、その後も同期を続けます。
元DBの既存データ
↓
フルロード
↓
移行先DB
元DBで発生した変更
↓
CDC
↓
移行先DB
画像:AWS公式ドキュメント掲載の図。既存データの移行と、変更の継続的な反映を示しています。
フルロード + CDCでダウンタイムを抑える
この方式なら、既存データをコピーしている間も、アプリは元DBを利用できます。
アプリは元DBを利用
↓
既存データをコピー
↓
変更を移行先へ反映
↓
書き込みを一時停止
↓
残りの変更を反映
↓
接続先を移行先DBへ変更
例えば、RDS for MySQLから新しいAurora MySQLへ移行する場合も、停止時間を短くしたいなら、こうした変更同期を含む方式を検討します。
CDCの反映には遅延が生じることがあります。切り替える前に、未反映の変更が残っていないか確認します。
データベース移行の流れ
-
移行方式を決める
データ量、更新頻度、許容できる停止時間を確認します。 -
移行先のDBを準備する
RDSやAuroraを作成し、DBエンジン、テーブル定義、接続権限を確認します。 -
移行元と移行先の接続を確認する
AWS DMSを使う場合は、両方のDBへ接続できるようにします。 -
既存データを移行する
対象テーブルを決め、フルロードなどを実行します。 -
変更データを同期する
CDCを使う場合は、同期が続いているか、遅延が増えていないか確認します。 -
データとアプリの動作を確認する
件数だけでなく、重要なレコードやアプリの処理を確認します。AWS DMSにはデータ検証機能もあります。 -
アプリの接続先を切り替える
書き込みを止め、残りの変更を反映してから切り替えます。 -
切り替え後を監視する
DB接続エラー、アプリの応答時間、データ更新を確認します。
データベース移行で注意するポイント
- AWS内の移行でも、元DBと移行先DBの接続経路・権限を確認する
- データだけでなく、テーブル定義、インデックス、制約の移行範囲を確認する
- CDCに必要な変更ログの設定と保持期間を確認する
- 移行処理が元DBへ与える負荷を確認する
- データ型や大きなデータ項目が正しく移るか試す
- 移行先の既存データを消す設定になっていないか確認する
- 切り替えに失敗した場合の対応を事前に決める
AWS DMSには、移行先テーブルを維持する、削除して作り直す、データを空にするといった設定があります。タスク実行前に、選んだ設定と移行先の状態を確認します。
まとめ
データベース移行は、オンプレミスからAWSへ移す場合だけでなく、AWS内でRDSを別のRDSやAuroraへ移す場合にも行います。
既存データにはフルロードなどを使い、移行中の更新にはCDCを使う方法があります。停止時間を短くしたい場合は、両方を組み合わせる方式を検討します。
最初に確認するのは、移行元と移行先、データ量、更新頻度、許容できる停止時間です。そこから適切な移行方法を選びます。

