Azure CLI を使用して Azure VM に SQL データベースを復元する
Azure CLI は、コマンドラインやスクリプトで Azure リソースを作成および管理するために使用します。 この記事では、Azure CLI を使用して、バックアップされた SQL データベースを Azure VM に復元する方法について説明します。 これらのアクションは、Azure portal を使用して実行することもできます。
CLI コマンドを実行するには、Azure Cloud Shell を使用します。
この記事では、次の方法について学習します。
- バックアップされたデータベースの復元ポイントを表示する
- データベースを復元する
この記事では、Azure Backup を使用してバックアップした SQL データベースが Azure VM 上で実行されていることを前提としています。 CLI を使用して Azure の SQL データベースをバックアップする方法を使用して SQL データベースをバックアップした場合は、次のリソースを使用しています。
SQLResourceGroup
という名前のリソース グループ。SQLVault
という名前のコンテナー。VMAppContainer;Compute;SQLResourceGroup;testSQLVM
という名前の保護されたコンテナー。sqldatabase;mssqlserver;master
という名前のバックアップされたデータベース/項目。westus
リージョン内のリソース。
Note
サポートされている構成とシナリオの詳細については、SQL バックアップのサポート マトリックスに関する記事を参照してください。
バックアップされたデータベースの復元ポイントを表示する
データベースのすべての復旧ポイントの一覧を表示するには、次のように az backup recoverypoint list コマンドを使用します。
az backup recoverypoint list --resource-group SQLResourceGroup \
--vault-name SQLVault \
--container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
--item-name sqldatabase;mssqlserver;master \
--output table
復旧ポイントの一覧は次のように表示されます。
Name Time BackupManagementType Item Name RecoveryPointType
------------------- --------------------------------- --------------------- ---------------------- ------------------
7660777527047692711 2019-12-10T04:00:32.346000+00:00 AzureWorkload sqldatabase;mssqlserver;master Full
7896624824685666836 2019-12-15T10:33:32.346000+00:00 AzureWorkload sqldatabase;mssqlserver;master Differential
DefaultRangeRecoveryPoint AzureWorkload sqldatabase;mssqlserver;master Log
上記の一覧には、完全、差分、ログの各バックアップに対応する 3 つの復旧ポイントが含まれています。
Note
az backup recoverypoint show-log-chain コマンドを使用して、すべての連続したログ バックアップ チェーンの開始ポイントと終了ポイントを表示することもできます。
データベースを復元するための前提条件
データベースを復元する前に、次の前提条件が満たされていることを確認してください。
- データベースの復元先にできるのは、同じリージョン内の SQL インスタンスのみです。
- ターゲット インスタンスは、ソースと同じコンテナーに登録されている必要があります。
データベースを復元する
Azure Backup では、Azure VM 上で実行されている SQL データベースを次のように復元できます。
- ログ バックアップを使用して、特定の日付または時刻 (秒) に復元する。 選択された時刻を基に、Azure Backup は完全、差分、または一連のログ バックアップから、必要になる適切なバックアップを自動的に判別します。
- 特定の完全バックアップまたは差分バックアップに復元することで、特定の復旧ポイントに復元する。
データベースを復元するには、az restore restore-azurewl コマンドを使用します。これには、入力の 1 つとして復旧構成オブジェクトが必要です。 このオブジェクトは、az backup recoveryconfig show コマンドを使用して生成できます。 復旧構成オブジェクトには、復元を実行するためのすべての詳細が含まれています。 これらの 1 つは復元モード (OriginalWorkloadRestore または AlternateWorkloadRestore) です。
Note
OriginalWorkloadRestore: 元のソースと同じ SQL インスタンスにデータを復元します。 このオプションでは、元のデータベースが上書きされます。 AlternateWorkloadRestore: データベースを別の場所に復元し、元のソース データベースを保持します。
別の場所に復元する
別の場所にデータベースを復元するには、復元モードとして AlternateWorkloadRestore を使用します。 次に、復元ポイントを選択する必要があります。以前の特定の時点、または以前の復元ポイントのいずれかを選択できます。
前の復元ポイントへの復元に進みましょう。 データベースの復元ポイントの一覧を表示して、復元するポイントを選択します。 ここでは、7660777527047692711 という名前の復元ポイントを使用しましょう。
上記の復元ポイント名と復元モードで、az backup recoveryconfig show コマンドを使用して復旧構成オブジェクトを作成します。 このコマンドの残りのパラメーターを確認します。
- --target-item-name: 復元されたデータベースによって使用される名前。 このシナリオでは、restored_database という名前を使用しました。
- --target-server-name: Recovery Services コンテナーに正常に登録され、復元対象のデータベースと同じリージョンにとどまる SQL サーバーの名前。 ここでは、保護したのと同じ SQL サーバー (名前は testSQLVM) にデータベースを復元します。
- --target-server-type: SQL データベースの復元の場合、SQLInstance を使用する必要があります。
az backup recoveryconfig show --resource-group SQLResourceGroup \
--vault-name SQLVault \
--container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
--item-name SQLDataBase;mssqlserver;master \
--restore-mode AlternateWorkloadRestore \
--rp-name 7660777527047692711 \
--target-item-name restored_database \
--target-server-name testSQLVM \
--target-server-type SQLInstance \
--workload-type SQLDataBase \
--output json
上記のクエリに対する応答は、次のような復旧構成オブジェクトです。
{
"container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;SQLResourceGroup;testSQLVM",
"container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
"database_name": "MSSQLSERVER/restored_database",
"filepath": null,
"item_type": "SQL",
"item_uri": "SQLDataBase;mssqlserver;master",
"log_point_in_time": null,
"recovery_mode": null,
"recovery_point_id": "7660777527047692711",
"restore_mode": "AlternateLocation",
"source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
"workload_type": "SQLDataBase",
"alternate_directory_paths": []
}
ここで、データベースを復元するには、az restore restore-azurewl コマンドを実行します。 このコマンドを使用するには、recoveryconfig.json という名前のファイルに保存されている上記の JSON 出力を入力します。
az backup restore restore-azurewl --resource-group SQLResourceGroup \
--vault-name SQLVault \
--recovery-config recoveryconfig.json \
--output table
出力は次のように表示されます。
Name Operation Status Item Name Backup Management Type Start Time UTC Duration
------------------------------------ ----------- ---------- --------------------------------- ------------------------ -------------------------------- --------------
be7ea4a4-0752-4763-8570-a306b0a0106f Restore InProgress master [testSQLVM] AzureWorkload 2022-06-21T03:51:06.898981+00:00 0:00:05.652967
応答によってジョブ名がわかります。 このジョブ名と az backup job show コマンドを使用してジョブの状態を追跡できます。
復元および上書き
元の場所に復元するには、復元モードとして OriginalWorkloadRestore を使用します。 次に、復元ポイントを選択する必要があります。以前の特定の時点、または以前の復元ポイントのいずれかを選択できます。
例として、以前の特定の時点 "28-11-2019-09:53:00" に復元することを選択してみましょう。 この復元ポイントは、dd-mm-yyyy, dd-mm-yyyy-hh:mm:ss の形式で指定できます。 復元する有効な特定の時点を選択するには、az backup recoverypoint show-log-chain コマンドを使用します。これにより、連続したログ チェーン バックアップの間隔が一覧表示されます。
az backup recoveryconfig show --resource-group SQLResourceGroup \
--vault-name SQLVault \
--container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
--item-name sqldatabase;mssqlserver;master \
--restore-mode OriginalWorkloadRestore \
--log-point-in-time 20-06-2022-09:02:41 \
--output json
上記のクエリに対する応答は、次のような復旧構成オブジェクトです。
{
"alternate_directory_paths": null,
"container_id": null,
"container_uri": "VMAppContainer;compute;petronasinternaltest;sqlserver-11",
"database_name": null,
"filepath": null,
"item_type": "SQL",
"item_uri": "SQLDataBase;mssqlserver;msdb",
"log_point_in_time": "20-06-2022-09:02:41",
"recovery_mode": null,
"recovery_point_id": "DefaultRangeRecoveryPoint",
"restore_mode": "OriginalLocation",
"source_resource_id": "/subscriptions/62b829ee-7936-40c9-a1c9-47a93f9f3965/resourceGroups/petronasinternaltest/providers/Microsoft.Compute/virtualMachines/sqlserver-11",
"workload_type": "SQLDataBase"
}
ここで、データベースを復元するには、az restore restore-azurewl コマンドを実行します。 このコマンドを使用するには、recoveryconfig.json という名前のファイルに保存されている上記の JSON 出力を入力します。
az backup restore restore-azurewl --resource-group sqlResourceGroup \
--vault-name sqlVault \
--recovery-config recoveryconfig.json \
--output table
出力は次のように表示されます。
Name Operation Status Item Name Backup Management Type Start Time UTC Duration
------------------------------------ ----------- ---------- ------------------------------- ------------------------ -------------------------------- --------------
1730ec49-166a-4bfd-99d5-93027c2d8480 Restore InProgress master [testSQLVM] AzureWorkload 2022-06-21T04:04:11.161411+00:00 0:00:03.118076
応答によってジョブ名がわかります。 このジョブ名と az backup job show コマンドを使用してジョブの状態を追跡できます。
セカンダリ リージョンへの復元
データベースをセカンダリ リージョンに復元するには、復元構成で、セカンダリ リージョンにあるターゲット コンテナーとサーバーを指定します。
az backup recoveryconfig show --resource-group SQLResourceGroup \
--vault-name SQLVault \
--container-name VMAppContainer;compute;SQLResourceGroup;testSQLVM \
--item-name sqldatabase;mssqlserver;master \
--restore-mode AlternateWorkloadRestore \
--from-full-rp-name 293170069256531 \
--rp-name 293170069256531 \
--target-server-name targetSQLServer \
--target-container-name VMAppContainer;compute;SQLResourceGroup;targetSQLServer \
--target-item-name testdb_restore_1 \
--target-server-type SQLInstance \
--workload-type SQLDataBase \
--target-resource-group SQLResourceGroup \
--target-vault-name targetVault \
--backup-management-type AzureWorkload
応答は、次のような回復構成オブジェクトです。
{
"container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/targetVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;SQLResourceGroup;targetSQLServer",
"container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
"database_name": "MSSQLSERVER/sqldatabase;mssqlserver;testdb_restore_1",
"filepath": null,
"item_type": "SQL",
"item_uri": "SQLDataBase;mssqlserver;master",
"log_point_in_time": null,
"recovery_mode": null,
"recovery_point_id": "932606668166874635",
"restore_mode": "AlternateLocation",
"source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
"workload_type": "SQLDataBase",
"alternate_directory_paths": [],
}
az restore restore-azurewl コマンドでこの復元構成を使用します。 --use-secondary-region
フラグを選択して、データベースをセカンダリ リージョンに復元します。
az backup restore restore-azurewl --resource-group SQLResourceGroup \
--vault-name testSQLVault \
--recovery-config recoveryconfig.json \
--use-secondary-region \
--output table
出力は次のように表示されます。
Name Operation Status Item Name Backup Management Type Start Time UTC Duration
------------------------------------ ------------------ ---------- ------------------------- ------------------------ -------------------------------- --------------
0d863259-b0fb-4935-8736-802c6667200b CrossRegionRestore InProgress master [testSQLVM] AzureWorkload 2022-06-21T08:29:24.919138+00:00 0:00:12.372421
Note
セカンダリ リージョンで使用できるバックアップ データの RPO は 12 時間です。 このため、CRR をオンにすると、セカンダリ リージョンの RPO は 12 時間 + ログ頻度期間 (15 分以上に設定できます) になります。
ファイルとして復元
バックアップ データをデータベースではなくファイルとして復元するために、復元モードとして RestoreAsFiles を使用します。 次に、復元ポイントを選択します。以前の特定の時点、または以前の復元ポイントのいずれかを選択できます。 指定されたパスにファイルがダンプされると、ファイルをデータベースとして復元したい任意の SQL マシンにこれらのファイルを移すことができます。 これらのファイルを任意のマシンに移動できるので、サブスクリプションやリージョンをまたいでデータを復元できるようになりました。
ここでは、過去における特定の時点 (28-11-2019-09:53:00
) を復元することを選択し、バックアップ ファイルのダンプ先に、同じ SQL サーバー上の /home/sql/restoreasfiles
を選択します。 この復元ポイントは、dd-mm-yyyy または dd-mm-yyyy-hh:mm:ss の形式で指定できます。 復元する有効な特定の時点を選択するには、az backup recoverypoint show-log-chain コマンドを使用します。これにより、連続したログ チェーン バックアップの間隔が一覧表示されます。
上記の復元ポイント名と復元モードで、az backup recoveryconfig show コマンドを使用して復旧構成オブジェクトを作成します。 このコマンドの残りの各パラメーターを確認します。
- --target-container-name: Recovery Services コンテナーに正常に登録され、復元対象のデータベースと同じリージョンに存在する SQL サーバーの名前。 hxehost という名前の、保護したものと同じ SQL サーバーにデータベースをファイルとして復元しましょう。
- --rp-name: ポイントインタイム リストアでは、復元ポイントの名前は DefaultRangeRecoveryPoint です。
az backup recoveryconfig show --resource-group SQLResourceGroup \
--vault-name SQLVault \
--container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
--item-name sqldatabase;mssqlserver;master \
--restore-mode RestoreAsFiles \
--rp-name 932606668166874635 \
--target-container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
--filepath /sql/restoreasfiles \
--output json
上記のクエリに対する応答は、次のような復旧構成オブジェクトです。
{
"alternate_directory_paths": null,
"container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupFabrics/Azure/protectionContainers/VMAppContainer;Compute;SQLResourceGroup;testSQLVM",
"container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
"database_name": null,
"filepath": "/sql/restoreasfiles",
"item_type": "SQL",
"item_uri": "SQLDataBase;mssqlserver;master",
"log_point_in_time": null,
"recovery_mode": "FileRecovery",
"recovery_point_id": "932606668166874635",
"restore_mode": "AlternateLocation",
"source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
"workload_type": "SQLDataBase"
}
ここで、データベースをファイルとして復元するには、az restore restore-azurewl コマンドを実行します。 このコマンドを使用するには、recoveryconfig.json という名前のファイルに保存されている上記の JSON 出力を入力します。
az backup restore restore-azurewl --resource-group SQLResourceGroup \
--vault-name SQLVault \
--restore-config recoveryconfig.json \
--output json
出力は次のように表示されます。
{
"eTag": null,
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupJobs/e9cd9e73-e3a3-425a-86a9-8dd1c500ff56",
"location": null,
"name": "e9cd9e73-e3a3-425a-86a9-8dd1c500ff56",
"properties": {
"actionsInfo": [
"1"
],
"activityId": "9e7c8ee4-f1ef-11ec-8a2c-3c52826c1a9a",
"backupManagementType": "AzureWorkload",
"duration": "0:00:04.304322",
"endTime": null,
"entityFriendlyName": "master [testSQLVM]",
"errorDetails": > [!NOTE]
> Information the user should notice even if skimmingnull,
"extendedInfo": {
"dynamicErrorMessage": null,
"propertyBag": {
"Job Type": "Restore as files"
},
"tasksList": [
{
"status": "InProgress",
"taskId": "Transfer data from vault"
}
]
},
"isUserTriggered": true,
"jobType": "AzureWorkloadJob",
"operation": "Restore",
"startTime": "2022-06-22T05:53:32.951666+00:00",
"status": "InProgress",
"workloadType": "SQLDataBase"
},
"resourceGroup": "SQLResourceGroup",
"tags": null,
"type": "Microsoft.RecoveryServices/vaults/backupJobs"
}
応答によってジョブ名がわかります。 このジョブ名と az backup job show コマンドを使用してジョブの状態を追跡できます。
注意
チェーン全体を復元せず、ファイルのサブセットのみを復元する場合は、こちらに記載されている手順に従ってください。
クロス サブスクリプション復元
クロス サブスクリプション復元 (CSR) を使用すると、復元アクセス許可が使用可能な場合は、任意のサブスクリプションとテナントの下の任意のコンテナーに柔軟に復元できます。 既定では、CSR はすべての Recovery Services コンテナー (既存のコンテナーと新しく作成されたコンテナー) で有効になっています。
注意
- Recovery Services コンテナーからクロス サブスクリプション復元をトリガーできます。
- CSR はストリーミング ベースのバックアップでのみサポートされ、スナップショット ベースのバックアップではサポートされていません。
- CSR を使用したリージョン間復元 (CRR) はサポートされていません。
az backup vault create
コンテナーの作成と更新中にコンテナーの CSR 状態を設定できるようにするパラメーター cross-subscription-restore-state
を追加します。
az backup recoveryconfig show
SQL または HANA データソースのサブスクリプション間復元をトリガーするときに、ターゲット サブスクリプションを入力として指定できるようにするパラメーター --target-subscription-id
を追加します。
例:
az backup vault create -g {rg_name} -n {vault_name} -l {location} --cross-subscription-restore-state Disable
az backup recoveryconfig show --restore-mode alternateworkloadrestore --backup-management-type azureworkload -r {rp} --target-container-name {target_container} --target-item-name {target_item} --target-resource-group {target_rg} --target-server-name {target_server} --target-server-type SQLInstance --target-subscription-id {target_subscription} --target-vault-name {target_vault} --workload-type SQLDataBase --ids {source_item_id}