Azure CLI は、コマンドラインやスクリプトで Azure リソースを作成および管理するために使用します。 この記事では、Azure VM で SQL データベースをバックアップし、Azure CLI を使用してオンデマンド バックアップをトリガーする方法について説明します。 これらのアクションは、Azure portal を使用して実行することもできます。
この記事は、Azure VM に SQL データベースが既にインストールされていることを前提としています。 (Azure CLI を使用して VM を作成することもできます)。
この記事では、次の方法について学習します。
- Recovery Services コンテナーを作成する
- SQL サーバーを登録し、そこでデータベースを検出する
- SQL データベースでバックアップを有効にする
- オンデマンド バックアップをトリガーする
現在サポートされているバックアップと復元のシナリオを確認するには、サポート マトリックスを参照してください。 よく寄せられる質問については、 よく寄せられる質問を参照してください。
前提条件
Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の概要」を参照してください。
CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。
ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、「 Azure CLI を使用した Azure への認証」を参照してください。
初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、「Azure CLI で拡張機能を使用および管理する」を参照してください。
az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。
Recovery Services コンテナーを作成する
Recovery Services コンテナーは、Azure VM や Azure VM 上で実行されているワークロード (SQL や HANA データベースなど) といった各保護リソースのバックアップ データを格納する論理コンテナーです。 保護されたリソースのバックアップ ジョブを実行すると、Recovery Services コンテナー内に復元ポイントが作成されます。 この復元ポイントのいずれかを使用して、データを特定の時点に復元できます。
az backup vault create コマンドを使用して Recovery Services コンテナーを作成します。 保護する VM のものと同じリソース グループと場所を使用します。 Azure CLI を使って Windows VM と Linux VM を作成する方法について説明します。
この記事では、次のものを使用します。
- SQLResourceGroup という名前のリソース グループ
- testSQLVM という名前の VM
- westus2 の場所にあるリソース。
次のコマンドを実行して、SQLVault という名前のコンテナーを作成します。
az backup vault create --resource-group SQLResourceGroup \
--name SQLVault \
--location westus2
既定では、Recovery Services コンテナーが geo 冗長ストレージ用に設定されています。 geo 冗長ストレージでは、プライマリ リージョンから数百マイル離れていたとしても、セカンダリ Azure リージョンにバックアップ データが確実にレプリケートされます。 ストレージの冗長性設定を変更する必要がある場合は、az backup vault backup-properties set コマンドを使用します。
az backup vault backup-properties set \
--name SQLVault \
--resource-group SQLResourceGroup \
--backup-storage-redundancy "LocallyRedundant/GeoRedundant"
コンテナーが正常に作成されたかどうかを確認するには、 az backup vault list コマンドを使用します。 応答は次のように表示されます。
Location Name ResourceGroup
--------- --------------- -------------
westus2 SQLVault SQLResourceGroup
SQL Server を登録して保護する
SQL Server を Recovery Services コンテナーに登録するには、az backup container register コマンドを使用します。 VMResourceId は、SQL をインストールするために作成した VM のリソース ID です。
az backup container register --resource-group SQLResourceGroup \
--vault-name SQLVault \
--workload-type SQLDataBase \
--backup-management-type AzureWorkload \
--resource-id VMResourceId
注
VM がコンテナーと同じリソース グループにない場合、SQLResourceGroup では、コンテナーが作成されたリソース グループが使用されます。
SQL サーバーを登録すると、現在のすべてのデータベースが自動的に検出されます。 ただし、今後追加される可能性のある新しいデータベースを検出するには、登録済み SQL サーバーに追加された新しいデータベースの検出に関するセクションを参照してください。
SQL インスタンスがコンテナーに正常に登録されているかどうかを確認するには、az backup container list コマンドを使用します。 応答は次のように表示されます。
Name Friendly Name Resource Group Type Registration Status
------------------------------------------------------ -------------- -------------------- --------- ----------------------
VMAppContainer;Compute;SQLResourceGroup;testSQLVM testSQLVM SQLResourceGroup AzureWorkload Registered
注
上記の出力の列 name は、コンテナー名を示しています。 このコンテナー名は、次のセクションで、バックアップを有効にしてトリガーするために使用されます。 たとえば、VMAppContainer;Compute;SQLResourceGroup;testSQLVM のように指定します。
SQL データベースでバックアップを有効にする
az backup protectable-item list コマンドを使うと、前の手順で登録した、SQL インスタンスで検出されたすべてのデータベースが一覧表示されます。
az backup protectable-item list --resource-group SQLResourceGroup \
--vault-name SQLVault \
--workload-type SQLDataBase \
--backup-management-type AzureWorkload \
--protectable-item-type SQLDataBase \
--output table
バックアップ対象のデータベースがこの一覧に表示され、次のようになります。
Name Protectable Item Type ParentName ServerName IsProtected
----------------------------- ---------------------- ------------ ----------- ------------
sqldatabase;mssqlserver;master SQLDataBase MSSQLServer testSQLVM NotProtected
sqldatabase;mssqlserver;model SQLDataBase MSSQLServer testSQLVM NotProtected
sqldatabase;mssqlserver;msdb SQLDataBase MSSQLServer testSQLVM NotProtected
次に、sqldatabase;mssqlserver;master データベースのバックアップを 構成します。
データベース上のバックアップを設定し保護するには、 az backup protection enable-for-azurewl コマンドを使ってください。 使用するポリシーの名前を指定します。 CLI を使用してポリシーを作成するには、az backup policy create コマンドを使用します。 この記事では SQLPolicy ポリシーを使用しています。
az backup protection enable-for-azurewl --resource-group SQLResourceGroup \
--vault-name SQLVault \
--policy-name SQLPolicy \
--protectable-item-name "sqldatabase;mssqlserver;master" \
--protectable-item-type SQLDataBase \
--server-name testSQLVM \
--workload-type SQLDataBase \
--output table
SQL Always On 可用性グループがあり、可用性グループ内の保護可能なデータソースを識別する場合は、同じコマンドを使用できます。 ここでは、保護可能な項目の種類は SQLAG です。
上記のバックアップ構成が完了したかどうかを確認するには、az backup job list コマンドを使用します。 出力は次のように表示されます。
Name Operation Status Item Name Start Time UTC
------------------------------------ --------------- --------- ---------- -------------------
e0f15dae-7cac-4475-a833-f52c50e5b6c3 ConfigureBackup Completed master 2019-12-03T03:09:210831+00:00
az backup job list コマンドを実行すると、登録、バックアップの構成、バックアップ データの削除などの他の操作に加えて、保護されたデータベース上で実行されたか、現在実行中のすべてのバックアップ ジョブ (スケジュール済みまたはオンデマンド) が一覧表示されます。
注
Azure Backup では、Azure VM で実行されている SQL データベースをバックアップしている場合、夏時間変更に合わせた自動調整は行われません。
必要に応じて手動でポリシーを変更してください。
自動保護を有効にする
シームレスなバックアップ構成の場合、将来追加されるすべてのデータベースを特定のポリシーで自動的に保護できます。 自動保護を有効にするには、 az backup protection auto-enable-for-azurewl コマンドを使用します。
この命令では将来のすべてのデータベースがバックアップされるため、処理は SQLInstance レベルで行われます。
az backup protection auto-enable-for-azurewl --resource-group SQLResourceGroup \
--vault-name SQLVault \
--policy-name SQLPolicy \
--protectable-item-name "sqlinstance;mssqlserver" \
--protectable-item-type SQLInstance \
--server-name testSQLVM \
--workload-type MSSQL\
--output table
オンデマンド バックアップをトリガーする
オンデマンドバックアップをトリガーするには、az backup protection backup-now コマンドを使用します。
注
このバックアップの保持期間は、実行したオンデマンド バックアップの種類によって決まります。
- On-demand full では、バックアップが最短で "45 日間"、最大で "99 年間" 保持されます。
- On-demand copy only full では、保持期間のいかなる値も受け入れます。
- On-demand differential では、ポリシーで設定されたスケジュールされた差分の保持に従ってバックアップが保存されます。
- On-demand log では、ポリシーに設定されているスケジュールされたログの保持に従ってバックアップが保持されます。
az backup protection backup-now --resource-group SQLResourceGroup \
--item-name "sqldatabase;mssqlserver;master" \
--vault-name SQLVault \
--container-name "VMAppContainer;Compute;SQLResourceGroup;testSQLVM" \
--backup-type Full \
--retain-until 01-01-2040 \
--output table
出力は次のように表示されます。
Name ResourceGroup
------------------------------------ -------------
e0f15dae-7cac-4475-a833-f52c50e5b6c3 sqlResourceGroup
応答によってジョブ名がわかります。 このジョブ名と az backup job show コマンドを使用してジョブの状態を追跡できます。
SQLインスタンスのスナップショットバックアップを設定する
以下のスナップショット例は PowerShellシェル構文を使用しており、行の継続のためのバックティックや一般的なCLI引数のための配列スプラッティングが含まれます。 それらはBashのスクリプトではありません。 ここに示すスナップショット オプションを利用できる Azure CLI バージョンを使用し、スナップショット サポート マトリックスとスナップショットの前提条件を確認してください。
コマンドを実行する前に、すべてのプレースホルダーを置き換えてください。 意図した操作だけを実行してください。例は別々のワークフローであり、完全に実行する単一のスクリプトではありません。
スナップショットバックアップ変数を設定する
VMが別のサブスクリプションにあっても、 Vaultのサブスクリプションとリソースグループを活用してください:
$vaultSubscription = "<vault-subscription-id>"
$vaultRg = "<vault-rg>"
$vaultName = "<vault-name>"
$sourceVm = "<source-vm-name>"
$instanceName = "<instance-name>"
$snapshotRg = "<snapshot-resource-group-name>"
$uamiId = "/subscriptions/<subscription-id>/resourceGroups/<identity-rg>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>"
$vaultArgs = @("--subscription", $vaultSubscription, "--resource-group", $vaultRg, "--vault-name", $vaultName)
az backup vault show --subscription $vaultSubscription --resource-group $vaultRg --name $vaultName
スナップショットポリシーファイルを準備する
$snapshotRgを実際のスナップショットリソースグループ名に設定してください。 この例では7日間のデイリーとログの保持、そして5日間の即時スナップショット保持を用いています。 デイリーおよびログの保持は少なくとも7日間でなければなりません。インスタントスナップショットの保持は別途設定されます。
ユーザー割り当てマネージド ID を読み取り、ポリシー オブジェクトを作成します:
$identityJson = az identity show --ids $uamiId --output json
if ($LASTEXITCODE -ne 0) { throw "Could not read the managed identity." }
$identity = $identityJson | ConvertFrom-Json
$snapshotTime = "2026-10-15T02:00:00Z"
$policy = @{
properties = @{
backupManagementType = "AzureWorkload"
workLoadType = "SQLInstance"
vmWorkloadPolicyType = "SnapshotV2"
settings = @{ timeZone = "UTC"; issqlcompression = $false; isCompression = $false }
subProtectionPolicy = @(
@{
policyType = "SnapshotFull"
schedulePolicy = @{
schedulePolicyType = "SimpleSchedulePolicy"
scheduleRunFrequency = "Daily"
scheduleRunTimes = @($snapshotTime)
}
retentionPolicy = @{
retentionPolicyType = "LongTermRetentionPolicy"
dailySchedule = @{
retentionTimes = @($snapshotTime)
retentionDuration = @{ count = 7; durationType = "Days" }
}
}
snapshotBackupAdditionalDetails = @{
instantRpRetentionRangeInDays = 5
instantRPDetails = $snapshotRg
userAssignedManagedIdentityDetails = @{
identityArmId = $uamiId
identityName = $identity.name
userAssignedIdentityProperties = @{
clientId = $identity.clientId
principalId = $identity.principalId
}
}
}
},
@{
policyType = "Log"
schedulePolicy = @{
schedulePolicyType = "LogSchedulePolicy"
scheduleFrequencyInMins = 60
}
retentionPolicy = @{
retentionPolicyType = "SimpleRetentionPolicy"
retentionDuration = @{ count = 7; durationType = "Days" }
}
}
)
}
}
別のスナップショット専用ファイルを作成するには、ログサブポリシーを削除する前にスナップショットとログのポリシーを保存します:
$policy | ConvertTo-Json -Depth 100 |
Set-Content -Encoding utf8 ".\sqlinst-snaplog-policy.json"
$policy.properties.subProtectionPolicy = @(
$policy.properties.subProtectionPolicy | Where-Object policyType -eq "SnapshotFull"
)
$policy | ConvertTo-Json -Depth 100 |
Set-Content -Encoding utf8 ".\sqlinst-snapshot-policy.json"
スナップショットポリシーの作成
それぞれのファイルから対応する2つのポリシーを作成します。 バックアップを有効にする際には、ご自身の保護要件に合ったポリシーを選択してください:
az backup policy create @vaultArgs --name "SqlInst-SnapLog" `
--backup-management-type AzureWorkload --workload-type SQLInstance `
--policy ".\sqlinst-snaplog-policy.json"
az backup policy create @vaultArgs --name "SqlInst-SnapOnly" `
--backup-management-type AzureWorkload --workload-type SQLInstance `
--policy ".\sqlinst-snapshot-policy.json"
az backup policy show @vaultArgs --name "SqlInst-SnapLog" --output json
インスタンス保護のためにVMを登録します
別のサブスクリプションの VM については、そのリソース ID とコンテナー サブスクリプションを指定してください。 オプションの --container-sub-id エイリアスは以下の --container-subscription-idを置き換えることができます:
az backup container register @vaultArgs `
--resource-id "/subscriptions/<vm-subscription-id>/resourceGroups/<vm-rg>/providers/Microsoft.Compute/virtualMachines/<vm-name>" `
--backup-management-type AzureWorkload --workload-type SQLInstance `
--container-subscription-id "<vm-subscription-id>"
保護可能な事例を検出
ディスカバリーはSQLコンポーネントに MSSQL を使用しています。 コンポーネントを一覧にし、サーバーごとにインスタンスをフィルタリングし、目的のインスタンスを取得します:
az backup protectable-item list @vaultArgs --workload-type MSSQL --output json
az backup protectable-item list @vaultArgs --workload-type MSSQL `
--protectable-item-type SQLInstance --server-name $sourceVm --output json
az backup protectable-item show @vaultArgs --workload-type MSSQL `
--protectable-item-type SQLInstance --name $instanceName --server-name $sourceVm --output json
スナップショット保護を有効にする
スナップショットポリシーを選択し、保護するユーザーデータベースを選択します
az backup protection enable-for-azurewl @vaultArgs `
--policy-name "SqlInst-SnapLog" --workload-type SQLInstance `
--protectable-item-type SQLInstance --protectable-item-name $instanceName `
--server-name $sourceVm --child-database-names "Testdb1" "Testdb2" "Testdb4"
オンデマンドのスナップショットバックアップをトリガーする
登録されたコンテナーと保護された項目をリストアップしてください。 作り込むのではなく、彼らの正式な現地名を正確にコピーする:
az backup container list @vaultArgs --backup-management-type AzureWorkload `
--query "[].{Name:name,VM:properties.friendlyName}" --output table
$containerName = "<native-source-container-name>"
$sourceArgs = $vaultArgs + @("--container-name", $containerName, "--backup-management-type", "AzureWorkload")
az backup item list @sourceArgs --workload-type SQLInstance --output json
$instanceItemName = "<native-protected-instance-item-name>"
$instanceArgs = $sourceArgs + @("--item-name", $instanceItemName, "--workload-type", "SQLInstance")
$retainUntil = (Get-Date).ToUniversalTime().AddDays(45).ToString("dd-MM-yyyy-HH:mm:ss")
az backup protection backup-now @instanceArgs --backup-type SnapshotFull --retain-until $retainUntil
返却されたジョブ名を az backup job show で進捗を監視してください。 リカバリーポイントおよび復元コマンドについては、「 SQLインスタンスのスナップショットを復元する」を参照してください。
次のステップ
- CLI を使用して Azure VM で SQL データベースを復元する方法について説明します。
- Azure portal を使用して Azure VM で実行されている SQL データベースをバックアップする方法について説明します。
関連コンテンツ
- REST API を使用して Azure Backup を使用して Azure VM 内の SQL Server データベースをバックアップします。
- REST API を使用して Azure VM 内の SQL Server データベースを復元します。
- Azure portal、Azure CLI、REST API を使用して、Azure VM 内の SQL Server データベースを管理します。