0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

データベース移行とは?AWSでのDB移行の方法を初心者向けに解説

0
Posted at

データベース移行とは?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公式ドキュメント掲載の移行タスク作成画面。移行元、移行先、移行方式を指定します。画面表示は変更される場合があります。

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公式ドキュメント掲載のAWS DMSレプリケーションタスクの図

画像: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を使う方法があります。停止時間を短くしたい場合は、両方を組み合わせる方式を検討します。

最初に確認するのは、移行元と移行先、データ量、更新頻度、許容できる停止時間です。そこから適切な移行方法を選びます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?