Azure DMSでデータベース移行

目次
1. はじめに
こんにちは、FEです。皆さんはどうやってデータベースを移行していますか?
ダンプリストア、データインレプリケーションなど色々移行方法はあると思います。
今回は自動で移行が出来るAzure Database Migration Service (DMS)について紹介します。
2. Azure DMSとは
Azure Database Migration Service (DMS) とはAzureで使用できるサービスで、オンプレミスやAzure内のデータベース移行を簡素化し、自動化するためのツールです。DMSを使用することで、
データベースのデータ、スキーマ、オブジェクト、ユーザーを移行することができます。
SQL Server、MySQL、PostgreSQL、MongoDBなどのデータベース管理システムを
サポートしており、ほぼダウンタイムなしで移行できます。

3. DMS移行検証
今回はAzure VM内のMySQLデータベースをAzure Database for MySQLフレキシブルサーバーへ
移行する検証を行います。MySQLデータベースを移行する際は、オンライン移行機能で
ダウンタイムを最小限に抑えることができます。
3.1. サーバー情報
下記が移行検証で使用するサーバー情報です。
Azure VM (移行元) | Azure Database for MySQL フレキシブルサーバー(移行先) | |
MySQLバージョン | 5.7.25 | 8.0.39 |
移行対象データベース | test(test_name) ※カッコ内はテーブル | – |
移行対象ユーザー | y2stestuser | – |
Azure VM(移行元)の「test」データベースとデータベース内の「y2stestuser」ユーザーを
Azure Database for MySQLフレキシブルサーバー(移行先)に移行します。
3.2. 移行検証の流れ
移行は下記の流れで進めます。

①Azure DMS作成
Azure DMSインスタンスを作成します。
Azure DMSインスタンスを配置するVNET、サブネットを事前に準備する必要があります。

②Azure DMSで移行プロジェクト作成
Azure DMSで移行プロジェクトを作成します。
移行プロジェクトではオンライン、オフライン移行の選択、移行元、移行先、移行する
データベースなどの設定ができます。
③データベース移行(初期ロード、レプリケーション、カットオーバー)
データベース移行では初期ロード、レプリケーション、カットオーバーの3フェーズがあります。

・初期ロード
初期ロードはデータベース移行プロセスの最初のステップで、移行元データベースから
移行先データベースへ一括移行を行います。
・レプリケーション
初期ロードが完了するとAzure DMSは自動的にレプリケーションを開始します。
移行元データベースが更新されると、移行先データベースに反映を行います。
・カットオーバー
移行元、移行先データベースで最終データ同期を行います。
カットオーバーが完了したら移行作業は完了です。
3.3. 前提条件・制限事項
Azure DMSのMySQL移行には前提条件、制限事項があります。以下に一部抜粋します。
前提条件
・作業用ユーザーに”REPLICATION CLIENT” と “REPLICATION SLAVE” 権限を
付与する必要がある
・binlogの有効期限を2日間以上に設定する必要がある
・移行元、移行先サーバーのsql_modeの設定が同じである必要がある
制限事項
・オブジェクトの DEFINER 句の移行はサポートされていない
・オンライン移行はROW binlog 形式に制限されている
・名前に大文字が含まれているデータベースはオンライン移行でサポートされていない
3.4. 移行検証
①Azure DMSの作成
まずはAzure DMSを作成します。
「すべてのサービス」から「Azure Database Migration Service」を選択します。

「Azure Database Migration Service」画面が表示されますので、「作成」を選択します。

作成画面に移り、「移行シナリオとDatabase Migration Serviceの選択」画面が表示されます。
下記設定項目を選択し、「選択」を押下します。
※MySQL以外のデータベースを移行する際は設定項目が異なるので注意。

「移行サービスの作成」の「基本」画面に移動するので、任意のサブスクリプション、
リソースグループ、移行サービス名(Azure DMS名)、リージョンを選択します。
サービスモードはAzure環境内の移行のため、「Azure」を選択します。

価格レベルの「サービスレベルの構成」を選択すると、「構成」画面が表示されます。
今回はオンライン移行を行うため、Premiumを選択し、「適用」を押下します。
※Premiumプランは6ヶ月間無料で使用することができます。
オンライン移行機能を使用する場合は、Premiumプランを選択する必要があります。

「ネットワーク」画面に移ると、Azure DMSを配置するVNET、サブネットを選択します。
今回は既に作成されているVNET、サブネットに配置します。

「確認および作成」画面に移動し、設定内容に誤りがないことを確認して「作成」を選択します。
作成完了までに5~10分程度かかります。

作成完了後、「Azure Database Migration Service」画面でDMSインスタンスが作成されていれば完了です。

②Azure DMSで移行プロジェクト作成
Azure DMSの作成が完了したので、移行プロジェクトを作成していきます。移行プロジェクトでは
移行方式(オンライン、オフライン)や移行対象サーバーを選択します。

「新しい移行プロジェクト」を選択します。

「新しい移行プロジェクト」画面に移ったら、任意のプロジェクト名を選択します。
また、今回はMySQLでオンライン移行を行うため、下記設定項目で「アクテビティの作成と実行」を選択します。

「ソースの選択」にて移行元サーバーの情報を入力し、「ターゲットの選択」を選択します。

「ターゲットの選択」にて移行先サーバーの情報を入力し、「データベースの選択」を選択します。

「データベースの選択」画面では移行対象のデータベース、ユーザー移行、スキーマ移行の選択が
出来ます。今回はサーバー全体とユーザーの移行をするため、「サーバー全体を移行する」、
「ユーザーアカウントと特権を移行する」を選択し、「移行の設定の構成」を押下します。
※「サーバー全体を移行する」を選択するとデータベース、スキーマ関連の設定が自動的に
選択され、次の「テーブルの選択」がスキップされます。

詳細設定は実施しないため、そのまま「サマリー」を選択します。

「サマリー画面」で任意の「活動名」を入力し、移行対象に誤りがないか確認して「移行の開始」を選択し、移行を開始します。

③データベース移行(初期ロード、レプリケーション、カットオーバー)
ここからが移行作業です。
移行画面に移り、初期ロードを開始します。初期ロード画面で移行対象データベースが「完了済み」になっていることを確認します。初期ロードは移行するデータベースの容量によって異なります。
今回は0.02MBのデータベースを移行したため、初期ロードが数秒で完了しました。
参考:弊社で660MB程度のデータベースを移行検証した際の初期ロードは9分程度でした。
ここで移行失敗になっている場合は「再試行」を行いましょう。
※移行対象外の「mysql」データベースも移行画面に表示されているのはユーザデータを
移行しているためです。

移行元、移行先データベースにログインすると移行されていることを確認できました。
※移行先のデータベース「dms_replication_progress」とテーブル「dms_persistent_objects」が
Azure DMSの移行用オブジェクトとして作成されます。
これらは移行作業完了後に削除して問題ないです。

対象ユーザーと付与されている権限も移行されていることを確認しました。

初期ロードが完了するとレプリケーションが実行されます。「データ変更のレプリケート(実行中)」画面でデータの更新状況を確認できます。 移行元サーバーでデータ更新を行い、レプリケーション
されるか確認します。
3行目に「たなか たろう」を追加します。

「データ変更のレプリケート(実行中)」画面の「挿入された行数」、
「処理された行書き込みイベントの数」が1に増えました。

移行先サーバーのテーブルも更新されています。

最終同期でカットオーバーを行います。移行の状況を確認し、下記を満たしていた場合、
「一括移行の開始」を選択し、カットオーバーの開始に進みます。
・「ソースからの遅れ時間 (秒)」が0に近づいていること
・移行元サーバーでクエリ ‘SHOW MASTER STATUS;’ を実行し、
「最後にコミットされたbinlogイベントの位置」と比較して等しいこと
・移行で現在一時的なエラーが再試行されていないこと


「一括移行を完了する」画面が表示されますので、「確認」のチェックボックスを押下して「適用」を選択します。

「一括移行の進行状況」が完了済みと表示されたら移行完了です。

最後に移行先でデータベース、テーブル、ユーザーが移行されていることを確認しましょう。
データベース、テーブルのデータ、ユーザーが移行されています。


4. まとめ
Azure Database Migration Service (DMS)でのデータベース移行はいかがでしたでしょうか。
GUI画面で作業が行えるので簡単に移行ができ、オンライン移行を行うことでダウンタイムを最小限に抑えることができます。
今後、データベースの移行を検討している方は是非試してみてください。