Azure Database Migration Service を使うと、高速データ移行機能により、外部の MySQL インスタンスから Azure Database for MySQL へのシームレスな移行を実行できます。 このチュートリアルでは、Azure Database Migration Service のオフライン移行アクティビティを使用して、MySQL 5.7 のオンプレミス インスタンスから Azure Database for MySQL (v5.7) にサンプル データベースを移行します。 この記事は、ソースとして MySQL データベース インスタンスを、ターゲットとして Azure Database for MySQL を想定していますが、ソース サーバーの名前と資格情報さえ変更すれば Azure Database for MySQL 間の移行にも使用できます。 また、下位バージョンの MySQL サーバー (v5.6 以降のバージョン) から上位バージョンへの移行もサポートされています。
注
この移行エクスペリエンスを PowerShell スクリプトで実現したバージョンについては、Azure Database for MySQL へのオフライン移行のスクリプト制御に関するページを参照してください。
Amazon Relational Database Service (RDS) for MySQL および Amazon Relational Database Service (RDS) for Amazon Aurora (MySQL ベース) も移行元としてサポートされます。
このチュートリアルでは、以下の内容を学習します。
- DMS インスタンスを作成する。
- DMS で MySQL 移行プロジェクトを作成する。
- DMS を使用して MySQL スキーマを移行する。
- 移行を実行する。
- 移行を監視する。
前提条件
このチュートリアルを完了するには、以下を実行する必要があります。
アクティブなサブスクリプションが含まれる Azure アカウントを用意します。 無料でアカウントを作成できます。
バージョン 5.7 の MySQL データベースをオンプレミスに用意します。 ない場合は、MySQL Community Edition 5.7 をダウンロードしてインストールしてください。
Azure Resource Manager デプロイ モデルを使用して、Azure Database Migration Service 用の Microsoft Azure 仮想ネットワークを作成します。これで、ExpressRoute または VPN を使用したオンプレミスのソース サーバーとのサイト間接続が確立されます。 仮想ネットワークの作成方法の詳細については、Virtual Network のドキュメントを参照してください。特に、詳細な手順が記載されたクイックスタートの記事を参照してください。
仮想ネットワークのセットアップ中、Microsoft へのネットワーク ピアリングに ExpressRoute を使用する場合は、サービスのプロビジョニング先となるサブネットに、次のサービス エンドポイントを追加してください。
- ターゲット データベース エンドポイント (SQL エンドポイント、Azure Cosmos DB エンドポイントなど)
- ストレージ エンドポイント
- サービス バス エンドポイント
Azure Database Migration Service にはインターネット接続がないため、この構成が必要となります。
ServiceBus、Storage、AzureMonitor の ServiceTag の送信ポート 443 が仮想ネットワーク ネットワーク のネットワーク セキュリティ グループ規則によってブロックされないようにします。 仮想ネットワークの NSG トラフィックのフィルター処理の詳細については、ネットワーク セキュリティ グループによるネットワーク トラフィックのフィルター処理に関する記事を参照してください。
Windows ファイアウォールを開き、Azure Database Migration Service の Virtual Network からの接続からソース MySQL サーバーへのアクセスを許可します。既定では TCP ポート 3306 です。
ソース データベースの前でファイアウォール アプライアンスを使用する場合は、Azure Database Migration Service の Virtual Network からの接続が移行のためにソース データベースにアクセスできるように、ファイアウォール規則を追加することが必要になる場合があります。
サーバー レベルの ファイアウォール規則 を作成するか、ターゲット Azure Database for MySQL の 仮想ネットワーク サービス エンドポイントを構成 して、Azure Database Migration Service の Virtual Network からターゲット データベースへのアクセスを許可します。
ソース MySQL は、サポートされている MySQL Community Edition で実行されている必要があります。 MySQL インスタンスのバージョンを確認するには、MySQL ユーティリティまたは MySQL Workbench で、次のコマンドを実行します。
SELECT @@VERSION;Azure Database for MySQL は、InnoDB テーブルのみをサポートします。 MyISAM テーブルを InnoDB に変換するには、MyISAM から InnoDB へのテーブルの変換に関する記事を参照してください。
ユーザーには、ソース データベースにあるデータの読み取り権限が必要です。
スキーマの移行を正常に完了するには、ソース サーバーで、移行を実行するユーザーに次の特権が必要です。
- ソースのサーバー レベルでの SELECT 特権。
- ビューを移行する場合、ユーザーはソース サーバーに 対する SHOW VIEW 権限と、ターゲット サーバーに対する CREATE VIEW 権限を持っている必要があります。
- トリガーを移行する場合、ユーザーはソース サーバーとターゲット サーバーに対する TRIGGER 特権を持っている必要があります。
- ルーチン (プロシージャーや関数) をマイグレーションする場合、ユーザーは、ターゲット上のサーバー・レベルで CREATE ROUTINE 特権および ALTER ROUTINE 特権を付与する必要があります。
- イベントを移行する場合、ユーザーはソース サーバーとターゲット サーバーに対する EVENT 権限を持っている必要があります。
- ユーザー/ログインを移行する場合、ユーザーはターゲット サーバーに対する CREATE USER 権限を持っている必要があります。
- すでに存在する可能性のあるテーブルを削除するために、ターゲット上でサーバーレベルのDROP特権を持っている必要があります。 たとえば、移行を再試行する場合などです。
- ターゲット上のサーバーレベルで外部キーを使用したテーブルを作成するためには、REFERENCES特権が必要です。
- MySQL 8.0 に移行する場合、ユーザーはターゲット サーバーに対する SESSION_VARIABLES_ADMIN 特権を持っている必要があります。
- ターゲットのサーバー レベルでの CREATE 特権。
- ターゲット上のサーバー レベルでの INSERT 特権。
- ターゲットのサーバー レベルでの UPDATE 特権。
- ターゲット上のサーバー レベルでの DELETE 特権。
ターゲットの Azure Database for MySQL インスタンスをサイズ設定する
Azure Database Migration Service を使用してデータ読み込みを高速化するようにターゲットの Azure Database for MySQL サーバーを準備するには、次のサーバー パラメーターと構成の変更をお勧めします。
max_allowed_packet– 1073741824 (つまり、1 GB) に設定して、大きな行による接続の問題を防ぎます。slow_query_log– 低速クエリ ログをオフにするには、OFFに設定します。 これにより、データの読み込み中にクエリのログ記録が遅いことによって発生するオーバーヘッドが排除されます。query_store_capture_mode– クエリ ストアをオフにするには、NONEに設定します。 これにより、クエリ ストアによるサンプリング アクティビティによって発生するオーバーヘッドが排除されます。innodb_buffer_pool_size– Innodb_buffer_pool_sizeは、Azure Database for MySQL サーバーのコンピューティングをスケールアップすることによってのみ増やすことができます。 移行中にサーバーをポータルの価格レベルから 64 仮想コア General Purpose SKU にスケールアップして、innodb_buffer_pool_sizeを増やします。innodb_io_capacityinnodb_io_capacity_max- 移行速度を最適化するために IO 使用率を向上させるために、Azure portal のサーバー パラメーターから9000に変更します。innodb_write_io_threadsinnodb_write_io_threads- 移行の速度を向上させるために、Azure portal のサーバー パラメーターから4に変更します。ストレージ層のスケールアップ – Azure Database for MySQL サーバーの IOP は、ストレージ層の増加に合せて徐々に増加します。
- フレキシブル サーバーのデプロイ オプションでは、ストレージ サイズに関係なく IOPS をスケーリング (増減) することができます。
- ストレージ サイズはスケールアップのみ可能で、スケールダウンすることはできません。
ソース MySQL サーバーの構成に基づいて、ターゲット フレキシブル サーバーのコンピューティング サイズとコンピューティング レベルを選択します。
1 移行の場合は、移行を高速化するために、ターゲット フレキシブル サーバーの General Purpose 16 仮想コア コンピューティング以上を選択することをお勧めします。 移行が完了したら、ターゲット サーバーの目的のコンピューティング サイズにスケール バックします。
移行が完了したら、サーバー パラメーターと構成を、ワークロードで必要な値に戻すことができます。
DMS を設定する
ターゲット フレキシブル サーバーをデプロイして構成したら、次に MySQL サーバーをフレキシブル サーバーに移行するように DMS を設定する必要があります。
リソース プロバイダーの登録
Microsoft.DataMigration リソース プロバイダーを登録するには、次の手順を実行します。
最初の DMS インスタンスを作成する前に、Azure portal にサインインし、サブスクリプションを検索して選択 します。
DMS インスタンスの作成に使用するサブスクリプションを選択してから、[リソース プロバイダー] を選択します。
"移行" という語を検索し、Microsoft.DataMigration に対して [登録] を選択します。
Database Migration Service インスタンスを作成する
Azure portal で [+ リソースの作成] を選択し、Azure Database Migration Service を検索して、ドロップダウン リストから [Azure Database Migration Service] を選択します。
[Azure Database Migration Service] 画面で、[作成] を選択します。
[移行サービスの作成] 画面で、サービスの名前、サブスクリプション、新規または既存のリソース グループを指定します。
価格レベルを選択し、ネットワーク画面に移動します。 オフライン移行機能は、Premium の価格レベルでのみ使用できます。
コストと価格レベルの詳細については、価格に関するページを参照してください。
既存の仮想ネットワークを一覧から選択するか、新しく作成する仮想ネットワークの名前を入力します。 [確認と作成] 画面に移動します。 必要に応じて、[タグ] 画面を使用してサービスにタグを追加できます。
この仮想ネットワークが Azure Database Migration Service に、ソース SQL Server とターゲット Azure SQL Database インスタンスへのアクセスを提供します。
Azure portal で仮想ネットワークを作成する方法の詳細については、「Azure portal を使用した仮想ネットワークの作成」を参照してください。
構成を確認し、[作成] を選択してサービスを作成します。
移行プロジェクトを作成する
サービスが作成されたら、Azure portal 内でそのサービスを探して開き、新しい移行プロジェクトを作成します。
Azure ポータルで、[All services]\(すべてのサービス\) を選択し、Azure Database Migration Service を検索して、Azure Database Migration Service を選択します。
検索結果から移行サービスのインスタンスを選択し、[+ 新しい移行プロジェクト] を選択します。
[新しい移行プロジェクト] 画面でプロジェクトの名前を指定し、[ソース サーバーの種類] 選択ボックスで [MySQL] を、[ターゲット サーバーの種類] 選択ボックスで [Azure Database for MySQL] を選択して、[Migration activity type]\(移行アクティビティの種類\) 選択ボックスで [Data migration]\(データの移行\) を選択します。 [アクティビティの作成と実行] を選択します。
または、[プロジェクトのみを作成します] を選択して移行プロジェクトを作成しておき、移行は後で実行することもできます。
移行プロジェクトを構成する
[ ソースの選択 ] 画面で、ソース MySQL インスタンスの接続の詳細を指定し、[ 次へ: ターゲットの選択] >>
[ ターゲットの選択 ] 画面で、ターゲットの Azure Database for MySQL インスタンスの接続の詳細を指定し、[ 次へ: データベースの選択] を選択 >>
[ データベースの選択 ] 画面で、移行のソース データベースとターゲット データベースをマップし、[ 次へ: 移行設定の構成] >>を選択します。 [Make Source Server Read Only]\(ソース サーバーを読み取り専用にする\) オプションを選択することでソースを読み取り専用にできますが、これはサーバー レベルの設定であることに注意してください。 選択した場合、選択したデータベースだけでなく、サーバー全体が読み取り専用に設定されます。
ターゲット データベースにソース データベースと同じデータベース名が含まれている場合、Azure Database Migration Service では、既定でターゲット データベースが選択されます。
[ 移行設定の構成 ] 画面で、移行の一部となるテーブルを選択し、[ 次へ: 概要] >>を選択します。 ターゲット テーブルにデータがある場合、既定では選択されませんが、明示的に選択でき、移行を開始する前に切り捨てられます。
[Summary]\(サマリー\) 画面の [アクティビティ名] ボックスで、移行アクティビティの名前を指定します。サマリーを見直して、ソースとターゲットの詳細が先ほど指定した内容と一致していることを確認します。
[移行の開始] を選択します。 移行アクティビティ ウィンドウが表示されます。アクティビティの [状態] は [初期化中] になります。 テーブルの移行が開始されると、[状態] が [実行中] に変わります。
移行を監視する
移行アクティビティ画面で [最新の情報に更新] を選択して表示を更新し、完了したテーブル数についての進行状況を確認します。
アクティビティ画面でデータベース名を選択すると、移行中の各テーブルの状態を確認できます。 [最新の情報に更新] を選択して、表示を更新してください。
移行を完了する
移行後のアクティビティ
オフライン移行での移行のカットオーバーは、このドキュメントの範囲外であるアプリケーションに依存するプロセスですが、移行後の次のアクティビティが規定されています。
- アプリケーションの要件に従って、ログイン、ロール、およびアクセス許可を作成します。
- 移行前の手順で抽出されたターゲット データベース上のすべてのトリガーを再作成します。
- ターゲット データベースに対してアプリケーションの健全性テストを実施して移行を認定します。
リソースをクリーンアップする
今後 Database Migration Service を使用しない場合は、次の手順に従ってサービスを削除してください。
Azure ポータルで、[All services]\(すべてのサービス\) を選択し、Azure Database Migration Service を検索して、Azure Database Migration Service を選択します。
検索結果から移行サービスのインスタンスを選択し、[サービスの削除] を選択します。
確認ダイアログで [DATABASE MIGRATION SERVICE の名前を入力してください] テキストボックスにサービスの名前を入力し、[削除] を選びます。