Share via


Azure Database for MySQL インポート CLI を使って Azure Database for MySQL - 単一サーバーをフレキシブル サーバーに移行する

適用対象: Azure Database for MySQL - シングル サーバー

Azure Database for MySQL インポート CLI (一般提供) を使うと、Azure Database for MySQL を単一サーバーからフレキシブル サーバーにシームレスに移行できます。 Azure MySQL インポートは、スナップショット バックアップおよび復元のテクノロジを使用して、移行元サーバーの物理データ ファイルを移行先サーバーに復元するためのシンプルで高速な移行パスを提供します。 インポート操作後は、価格とパフォーマンスの向上、データベース構成のきめ細かな制御、カスタム メンテナンス期間などのフレキシブル サーバーの利点を利用できます。

ユーザー入力に基づいて、Azure MySQL インポートは、移行先フレキシブル サーバーをプロビジョニングした後、移行元サーバーのバックアップを作成して移行先に復元する役割を担います。 データ ファイル、サーバー パラメーター、互換性のあるファイアウォール規則、サーバー プロパティ (レベル、バージョン、SKU 名、ストレージ サイズ、場所、geo 冗長バックアップ、パブリック アクセス、タグ、自動拡張、バックアップ保有期間、管理者ユーザーと管理者パスワード) が単一サーバーからフレキシブル サーバー インスタンスにコピーされます。

Azure Database for MySQL インポート CLI は、最初にオフライン インポート操作を実行することで、ほぼゼロのダウンタイム移行をサポートします。その結果、ユーザーはソースとターゲットの間でデータイン レプリケーションを設定してオンライン移行を実行できます。

このチュートリアルでは、Azure Database for MySQL インポート CLI コマンドを使って、Azure Database for MySQL 単一サーバーをフレキシブル サーバーに移行する方法を示します。

新機能

  • レガシ ストレージ アーキテクチャ (General Purpose ストレージ V1) を使用する単一サーバーの Azure Database for MySQL インポート操作がサポートされるようになりました。 インポート操作を開始する前に、レガシ ストレージを使用する単一サーバー インスタンスのパラメーター log_bin=ON を設定する必要があります。 これを行うには、単一サーバー インスタンスの読み取りレプリカを作成し、削除します。 この操作により、パラメーター log_bin が ON に設定され、インポート操作をトリガーしてフレキシブル サーバーに移行できるようになります。 (2024 年 2 月)

Azure Cloud Shell を起動する

Azure Cloud Shell は無料のインタラクティブ シェルです。この記事の手順は、Azure Cloud Shell を使って実行することができます。 一般的な Azure ツールが事前にインストールされており、アカウントで使用できるように構成されています。

Cloud Shell を開くには、コード ブロックの右上隅にある [使ってみる] を選択します。 https://shell.azure.com/bash に移動して、別のブラウザー タブで Cloud Shell を開くこともできます。 [コピー] を選択してコードのブロックをコピーし、Cloud Shell に貼り付けてから、 [入力] を選択して実行します。

CLI をローカルにインストールして使用する場合、このチュートリアルでは、Azure CLI バージョン 2.54.0 以降が必要です。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。

セットアップ

az sign-in コマンドを使用してお使いのアカウントにサインインする必要があります。 id プロパティに注意してください。これは、お使いの Azure アカウントのサブスクリプション ID を参照します。

az login

az account set コマンドを使用して、移行元 Azure Database for MySQL - 単一サーバーが配置されている、お使いのアカウントの下の特定のサブスクリプションを選択します。 コマンドの subscription 引数の値として使用する、az login の出力の ID 値をメモしておきます。 複数のサブスクリプションをお持ちの場合は、移行元 Azure Database for MySQL - 単一サーバーが配置されている適切なサブスクリプションを選択してください。 お使いのすべてのサブスクリプションを取得するには、az account list を使用します。

az account set --subscription <subscription id>

制限事項と前提条件

  • ソースの Azure Database for MySQL 単一サーバーのエンジン バージョンが v8.x である場合は、フレキシブル サーバーへの移行後に何らかのエンコードの非互換性が発生しないように、ソース サーバーの .NET クライアント ドライバー バージョンを 8.0.32 にアップグレードするようにしてください。

  • 移行元 Azure Database for MySQL - 単一サーバーと移行先 Azure Database for MySQL - フレキシブル サーバーが同じサブスクリプション、リソース グループ、リージョンに存在しており、同じ MySQL バージョンを使用している必要があります。 異なるサブスクリプション、リソース グループ、リージョン、およびバージョン間でインポートを行うことはできません。

  • Azure Database for MySQL インポート CLI でサポートされる MySQL バージョンは 5.7 と 8.0 です。 単一サーバー上で異なる MySQL メジャー バージョンを使用している場合は、インポート コマンドをトリガーする前に、必ず単一サーバーのインスタンス上のバージョンをアップグレードしてください。

  • Azure Database for MySQL - 単一サーバー インスタンスのサーバー パラメーター 'lower_case_table_names' が 2 に設定されていて、アプリケーションでパーティション テーブルが使われている場合、インポート操作によってパーティション テーブルが破損します。 破損のない MySQL インポート操作を続行するには、Azure Database for MySQL - 単一サーバー インスタンスの 'lower_case_table_names' を 1 に設定することをお勧めします。

  • 既存の Azure MySQL フレキシブル サーバーへのインポートはサポートされていません。 CLI コマンドは、新しい Azure MySQL フレキシブル サーバーのインポートを開始します。

  • CLI コマンド パラメーターの更新時にフレキシブル ターゲット サーバーが非 HA (高可用性が無効) としてプロビジョニングされている場合は、後で同一ゾーン HA に切り替えることができますが、ゾーン冗長 HA に切り替えることはできません。

  • CMK が有効な単一サーバー インスタンスの場合、Azure Database for MySQL インポート コマンドでは、移行先フレキシブル サーバーで CMK を有効にするための必須の入力パラメーターを指定する必要があります。

  • 単一サーバー インスタンスで "インフラストラクチャの二重暗号化" が有効な場合、同様の機能をサポートするために、移行先フレキシブル サーバー インスタンスでカスタマー マネージド キー (CMK) を有効にすることをお勧めします。 Azure Database for MySQL インポート CLI 入力パラメーターを使ってターゲット サーバーで CMK を有効にするか、移行後に有効にするかを選択できます。

  • 単一サーバー インスタンスで "クエリ ストア" が有効な場合、同様の機能をサポートするために、ターゲット フレキシブル サーバー インスタンスで低速クエリ ログを有効にすることをお勧めします。 こちらの手順に従って、ターゲット フレキシブル サーバーで低速クエリ ログを構成できます。 その後、ブック テンプレートを使用してクエリ分析情報を表示できます。

  • 単一サーバー インスタンスにレガシ ストレージ アーキテクチャ (General Purpose ストレージ V1) が含まれている場合は、インポート操作を開始する前に、単一サーバー インスタンスのパラメーター log_bin=ON を設定する必要があります。 これを行うには、単一サーバー インスタンスの読み取りレプリカを作成し、削除します。 この操作により、パラメーター log_bin が ON に設定され、インポート操作をトリガーしてフレキシブル サーバーに移行できるようになります。

  • シングル サーバー インスタンスのエンジン バージョンが v8.0 である場合は、シングル サーバー インスタンスとフレキシブル サーバー インスタンスの間のコミュニティ マイナー バージョンの違いによる破壊的変更を回避するために、以下のアクションを実行することを検討してください。

    • 次のステートメントを実行して、インスタンスが誤ったヒストグラム情報の影響を受けている可能性があるかどうかを確認します。 対応するテーブルが出力される場合は、https://dev.mysql.com/blog-archive/histogram-statistics-in-mysql/ を参照して、ヒストグラム情報を削除した後、フレキシブル サーバー上でヒストグラム情報を再作成することをお勧めします。 ヒストグラム情報は列に関する統計情報に過ぎず、この情報はシステム テーブルにのみ存在するため、ヒストグラム情報を削除してもテーブル データには影響しないことに注意してください。

          SELECT DISTINCT SCHEMA_NAME, TABLE_NAME FROM `information_schema`.`column_statistics`;
      
    • 次のコマンドを実行して、テーブル列の順序が乱れている可能性があるテーブルがないかを確認します。 このチェックによって影響を受けたテーブルが特定された場合は、これらのテーブルからすべてのデータをダンプしてからインポートし直す必要があります。 これを行わないと、binlog 内の列の順番がユーザー テーブル内の列の順番と一致しなくなる可能性があります。 この不一致により、ユーザーがレプリケーションを設定したり、データを復元したり、高可用性 (HA) やその他の操作を有効にしたりできなくなる可能性があります。

          SELECT table_schema, table_name, COUNT(*) AS column_count, MAX(ORDINAL_POSITION) AS max_ordinal_position
          FROM information_schema.columns
          GROUP BY table_schema, table_name
          HAVING column_count != max_ordinal_position;
      
  • インスタンス レベルのインポートのみがサポートされています。 選択したデータベースをインスタンス内にインポートするオプションは提供されていません。

  • 以下の項目は、インポートの操作後にユーザーが移行元から移行先にコピーする必要があります。

    • 読み取りレプリカ
    • 監視ページの設定 (アラート、メトリック、診断の設定)
    • フレキシブル サーバーの参照を使用して、単一サーバーのインスタンスを管理するためにホストされているすべての Terraform/CLI スクリプトを更新する必要があります

Azure Database for MySQL インポート操作をトリガーして、Azure Database for MySQL - 単一サーバーからフレキシブル サーバーに移行する

az mysql flexible-server import create コマンドを使って、Azure Database for MySQL インポート操作をトリガーします。 次のコマンドは、移行先フレキシブル サーバーを作成し、サービスの既定値と Azure CLI のローカル コンテキストの値を使用して、移行元から移行先の送信先へのインスタンス レベルのインポートを実行します。

az mysql flexible-server import create --data-source-type
                                --data-source
                                --resource-group
                                --name
                                [--sku-name]
                                [--tier]
                                [--version]
                                [--storage-size]
                                [--mode]
                                [--admin-password]
                                [--admin-user]
                                [--auto-scale-iops {Disabled, Enabled}]
                                [--backup-identity]
                                [--backup-key]
                                [--backup-retention]
                                [--database-name]
                                [--geo-redundant-backup {Disabled, Enabled}]
                                [--high-availability {Disabled, SameZone, ZoneRedundant}]
                                [--identity]
                                [--iops]
                                [--key]
                                [--location]
                                [--private-dns-zone]
                                [--public-access]
                                [--resource-group]
                                [--standby-zone]
                                [--storage-auto-grow {Disabled, Enabled}]
                                [--subnet]
                                [--subnet-prefixes]
                                [--tags]
                                [--vnet]
                                [--zone]

次の例では、"test-single-server" という名前の単一サーバーのデータ ソース情報と移行先フレキシブル サーバーの情報を取得し、test-flexible-server という名前の移行先フレキシブル サーバーを westus の場所 (移行元単一サーバーと同じ場所) に作成して、移行元から移行先へのインポートを実行します。 Azure Database MySQL インポート コマンドでは、CLI コマンドに入力が指定されていない場合はスマートな既定値として、対応するレベル、バージョン、SKU 名、ストレージ サイズ、場所、geo 冗長バックアップ、パブリック アクセス、タグ、自動拡張、バックアップ保有期間、管理者ユーザーと管理者パスワードのプロパティが単一サーバーからフレキシブル サーバーにマップされます。 これらのオプションのパラメーターに対して入力を指定することで、スマートな既定値のオーバーライドを選択できます。

az mysql flexible-server import create --data-source-type "mysql_single" --data-source "test-single-server" --resource-group "test-rg"  --name "test-flexible-server"

次の例では、"test-single-server" という名前の単一サーバーのデータ ソース情報と移行先フレキシブル サーバーの情報を取得し、test-flexible-server という名前の移行先フレキシブル サーバーを、ゾーン冗長が有効で仮想ネットワーク統合を含む westus の場所 (移行元単一サーバーと同じ場所) に作成して、移行元から移行先へのインポートを実行します。 仮想ネットワークの構成について詳しくは、こちらを参照してください。

# create vnet
az network vnet create --resource-group testGroup --name myVnet --location testLocation --address-prefixes 172.0.0.0/16

# create subnet
az network vnet subnet create --resource-group testGroup --vnet-name myVnet --address-prefixes 172.0.0.0/24 --name mySubnet

# create private dns zone
az network private-dns zone create -g testGroup -n myserver.private.contoso.com

# trigger mysql import
az mysql flexible-server import create --data-source-type "mysql_single" --data-source "test-single-server" --resource-group "test-rg"  --name "test-flexible-server" --high-availability ZoneRedundant --zone 1 --standby-zone 3  --vnet "myVnet" --subnet "mySubnet" --private-dns-zone "myserver.private.contoso.com"

次の例では、カスタマー マネージド キー (CMK) が有効な "test-single-server" という単一サーバーのデータ ソース情報と移行先フレキシブル サーバー情報を取得し、test-flexible-server という移行先フレキシブル サーバーを作成し、移行元から移行先へのインポートを実行します。 CMK が有効な単一サーバー インスタンスの場合、Azure Database for MySQL インポート コマンドを使うには、CMK を有効にするために必須の入力パラメーター (--key keyIdentifierOfTestKey --identity testIdentity) を指定する必要があります。

# create keyvault
az keyvault create -g testGroup -n testVault --location testLocation \
  --enable-purge-protection true

# create key in keyvault and save its key identifier
keyIdentifier=$(az keyvault key create --name testKey -p software \
  --vault-name testVault --query key.kid -o tsv)

# create identity and save its principalId
identityPrincipalId=$(az identity create -g testGroup --name testIdentity \
  --location testLocation --query principalId -o tsv)

# add testIdentity as an access policy with key permissions 'Wrap Key', 'Unwrap Key', 'Get' and 'List' inside testVault
az keyvault set-policy -g testGroup -n testVault --object-id $identityPrincipalId \
  --key-permissions wrapKey unwrapKey get list

# trigger azure database for mysql import for CMK enabled single server
az mysql flexible-server import create --data-source-type "mysql_single" --data-source "test-single-server" --resource-group "test-rg"  --name "test-flexible-server" --key $keyIdentifier --identity testIdentity

上記の例の引数の詳細を次に示します。

設定 値の例 説明
data-source-type mysql_single Azure Database for MySQL インポートをトリガーするための移行元の宛先として機能するデータ ソースの種類。 受け入れ可能な値: [mysql_single]。 受け入れ可能な値の説明 - mysql_single: Azure Database for MySQL 単一サーバー。
data-source test-single-server 移行元 Azure Database for MySQL 単一サーバーの名前またはリソース ID。
resource-group test-rg 移行元 Azure Database for MySQL 単一サーバーの Azure リソース グループの名前。
mode オフライン Azure Database for MySQL インポートのモード。 受け入れ可能な値: [Offline]; 既定値: Offline。
location westus 移行元 Azure Database for MySQL 単一サーバーの Azure の場所。
name test-flexible-server 移行先 Azure Database for MySQL フレキシブル サーバーの一意の名前を入力します。 サーバー名に含めることができるのは、英小文字、数字、およびハイフン (-) のみであり、 3 ~ 63 文字にする必要があります。 注: このサーバーは、移行元と同じサブスクリプション、リソース グループ、リージョンにデプロイされます。
admin-user adminuser 移行先 Azure Database for MySQL フレキシブル サーバーの管理者サインインのユーザー名。 これを azure_superuseradminadministratorrootguestpublic にすることはできません。
admin-password password 移行先 Azure Database for MySQL フレキシブル サーバーの管理者ユーザーのパスワード。 8 ~ 128 文字にする必要があります。 パスワードには、英大文字、英小文字、数字、英数字以外の文字のうち、3 つのカテゴリの文字が含まれている必要があります。
sku-name GP_Gen5_2 移行先 Azure Database for MySQL フレキシブル サーバーの価格レベルの名前とコンピューティング構成を入力します。 省略表現の {価格レベル} {コンピューティング世代} {仮想コア} という規則に従います。 詳細については、価格レベルに関するページを参照してください。
レベル バースト可能 移行先 Azure Database for MySQL フレキシブル サーバーのコンピューティング レベル。 受け入れ可能な値: Burstable、GeneralPurpose、MemoryOptimized; 既定値: Burstable。
public-access 0.0.0.0 移行先 Azure Database for MySQL フレキシブル サーバーのパブリック アクセスを決定します。 IP の許可リストに含める IP アドレスの 1 つまたは範囲を入力します。 IP アドレス範囲はダッシュで区切る必要があり、スペースは含まれません。 0.0.0.0 を指定すると、Azure 内にデプロイされたすべてのリソースからサーバーにアクセスするためのパブリック アクセスが許可されます。 "None" に設定すると、サーバーがパブリック アクセス モードに設定されますが、ファイアウォール規則は作成されません。
vnet myVnet 新規または既存の仮想ネットワークの名前または ID。 別のリソース グループまたはサブスクリプションの vnet を使いたい場合は、リソース ID を指定してください。 名前は 2 文字から 64 文字にする必要があります。 名前は先頭が文字または数字、末尾が文字、数字、アンダースコアでなければならず、中に含めることができるのは文字、数字、アンダースコア、ピリオド、ハイフンのみです。
サブネット mySubnet 新規または既存のサブネットの名前またはリソース ID。 別のリソース グループまたはサブスクリプションのサブネットを使いたい場合は、名前の代わりにリソース ID を指定してください。 サブネットは flexibleServers に委任されることに注意してください。 委任後、このサブネットを他の種類の Azure リソースに使うことはできません。
private-dns-zone myserver.private.contoso.com 新規または既存のプライベート DNS ゾーンの名前または ID。 同じリソース グループ、異なるリソース グループ、または異なるサブスクリプションのプライベート DNS ゾーンを使用できます。 別のリソース グループまたはサブスクリプションのゾーンを使う場合は、リソース ID を指定してください。 ユーザーから指定されなかった場合、CLI は仮想ネットワークと同じリソース グループ内に新しいプライベート DNS ゾーンを作成します。
キー testKey のキー識別子 データ暗号化用の主キーコンテナー キーのリソース ID。
ID testIdentity データ暗号化用のユーザー割り当て ID の名前またはリソース ID。
storage-size 32 移行先 Azure Database for MySQL フレキシブル サーバーのストレージ容量。 最小値は 20 GiB、最大値は 16 TiB です。
tags key=value Azure リソース グループの名前を指定します。
version 5.7 移行先 Azure Database for MySQL フレキシブル サーバーのサーバーのメジャー バージョン。
high-availability ZoneRedundant 移行先 Azure Database for MySQL フレキシブル サーバーの高可用性機能を有効 (ZoneRedundant または SameZone) または無効にします。 受け入れ可能な値: Disabled、SameZone、ZoneRedundant;既定値: Disabled。
ゾーン 1 リソースをプロビジョニングする可用性ゾーン。
standby-zone 3 高可用性が有効になっている場合のスタンバイ サーバーの可用性ゾーン情報。
storage-auto-grow Enabled 移行先 Azure Database for MySQL フレキシブル サーバーのストレージの自動拡張を有効または無効にします。 既定値は Enabled です。 受け入れ可能な値: Disabled、Enabled; 既定値: Enabled。
iops 500 移行先 Azure Database for MySQL フレキシブル サーバーに割り当てられる IOPS の数。 プロビジョニングされたコンピューティングとストレージに基づいて一定量の空き IOPS が得られます。 IOPS の既定値は free IOPS です。 コンピューティングとストレージに基づく IOPS の詳細については、「Azure Database for MySQL フレキシブル サーバーの IOPS」を参照してください。

オンライン移行の手順

上記の Azure Database for MySQL インポート操作を完了したら、次を実行します。

  • ターゲットの Azure Database for MySQL フレキシブル サーバーにログインし、次のコマンドを実行して、Azure Database for MySQL インポート CLI がターゲット サーバーに復元するために使うバックアップ スナップショットに対応するバイナリ ログ ファイル名と位置を取得します。
CALL mysql.az_show_binlog_file_and_pos_for_mysql_import();
  • こちらに記載されている手順に従い、bin-log の位置を使ってソース サーバーとターゲット サーバーのインスタンス間のデータイン レプリケーションを設定します。ターゲット サーバーがソース サーバーに追いついたことがレプリケーション状態に反映されたら、レプリケーションを停止して一括移行を実行します。

Azure Database for MySQL インポート CLI コマンド パラメーターを構成するためのベスト プラクティス

Azure Database for MySQL インポート CLI コマンドをトリガーする前に、Azure Database for MySQL インポート CLI を使ったデータの読み込みを高速化するために、次のパラメーター構成ガイダンスを検討してください。

  • スマートな既定値をオーバーライドしたい場合は、次の表の詳細を参照して、移行元単一サーバーの価格レベルと vCore 数に基づいて移行先フレキシブル サーバーのコンピューティング レベルと SKU 名を選択します。

    単一サーバーの価格レベル 単一サーバーの仮想コア数 フレキシブル サーバーのレベル フレキシブル サーバーの SKU 名
    Basic 1 バースト可能 Standard_B1s
    Basic 2 バースト可能 Standard_B2s
    General Purpose 4 GeneralPurpose Standard_D4ds_v4
    General Purpose 8 GeneralPurpose Standard_D8ds_v4
    General Purpose 16 GeneralPurpose Standard_D16ds_v4
    General Purpose 32 GeneralPurpose Standard_D32ds_v4
    General Purpose 64 GeneralPurpose Standard_D64ds_v4
    メモリ最適化 4 MemoryOptimized Standard_E4ds_v4
    メモリ最適化 8 MemoryOptimized Standard_E8ds_v4
    メモリ最適化 16 MemoryOptimized Standard_E16ds_v4
    メモリ最適化 32 MemoryOptimized Standard_E32ds_v4
  • 移行先フレキシブル サーバーの MySQL バージョン、リージョン、サブスクリプションおよびリソースを、移行元単一サーバーと同じにする必要があります。

  • 移行先フレキシブル サーバーのストレージ サイズを、移行元単一サーバーのストレージ サイズ以上にする必要があります。

  • 単一サーバー インスタンスで "インフラストラクチャの二重暗号化" が有効な場合、同様の機能をサポートするために、移行先フレキシブル サーバー インスタンスでカスタマー マネージド キー (CMK) を有効にすることをお勧めします。 Azure Database for MySQL インポート CLI 入力パラメーターを使ってターゲット サーバーで CMK を有効にするか、移行後に有効にするかを選択できます。

Azure Database for MySQL インポートが単一サーバー インスタンスを移行するのにどれくらい時間がかかりますか?

ストレージ サイズに基づくベンチマーク パフォーマンスを下に示します。

単一サーバー ストレージ サイズ インポート時間
1 GiB 0 分 23 秒
10 GiB 4 分 24 秒
100 GiB 10 分 29 秒
500 GiB 13 分 15 秒
1 TB (テラバイト) 22 分 56 秒
10 TB 2 時間 5 分 30 秒

上の表では、ストレージ サイズが大きくなるにつれ、データのコピーに必要な時間もほぼ線形のリレーションシップで増加しています。 ただし、コピー速度はネットワークの変動によって大きな影響を受ける可能性があることに注意することが重要です。 したがって、ここで提供されているデータは参考程度に留める必要があります。

10 GiB ストレージ サイズのさまざまなテーブル数に基づくベンチマーク パフォーマンスを下に示します。

単一サーバー インスタンス内のテーブルの数 インポート時間
100 4 分 24 秒
200 4 分 40 秒
800 4 分 52 秒
14,400 17 分 41 秒
28,800 19 分 18 秒
38,400 22 分 50 秒

ファイルの数が増えると、データベース内の各ファイル/テーブルが非常に小さくなる可能性があります。 これにより、着実な量のデータが転送されますが、ファイル関連の操作がより頻繁に発生し、Azure Database for Mysql インポートのパフォーマンスに影響を与える可能性があります。

インポート後の手順

  • Azure Database for MySQL インポート操作が正常に完了した後、ソースの単一サーバーからターゲットのフレキシブル サーバーに次のプロパティをコピーします。
    • 読み取りレプリカ
    • event_scheduler のサーバー パラメーター値
    • 監視ページの設定 (アラート、メトリック、診断の設定)
    • フレキシブル サーバーの参照を使用して、単一サーバーのインスタンスを管理するためにホストされているすべての Terraform/CLI スクリプトを更新する必要があります。

次のステップ