Sauvegarder des bases de données SQL dans une machine virtuelle Azure à l’aide d’Azure CLI

Azure CLI permet de créer et de gérer des ressources Azure à partir de la ligne de commande ou par le biais de scripts. Cet article explique comment sauvegarder une base de données SQL dans une machine virtuelle Azure et déclencher des sauvegardes à la demande à l’aide d’Azure CLI. Vous pouvez également effectuer ces actions à l’aide du portail Azure.

Cet article part du principe qu’une base de données SQL est déjà installée sur une machine virtuelle Azure. (Vous pouvez également créer une machine virtuelle à l’aide d’Azure CLI).

Dans cet article, vous allez apprendre à :

  • Créer un coffre Recovery Services
  • Inscrire le serveur SQL Server et découvrir les bases de données qu’il contient
  • Activer la sauvegarde sur une base de données SQL
  • Déclencher une sauvegarde à la demande

Pour voir les scénarios de sauvegarde et de restauration que nous prenons en charge, consultez la matrice de prise en charge. Pour les questions courantes, consultez les questions fréquemment posées.

Prérequis

Créer un coffre Recovery Services

Un coffre Recovery Services est un conteneur logique qui stocke les données de sauvegarde de chaque ressource protégée, par exemple les machines virtuelles Azure ou les charges de travail s’exécutant sur des machines virtuelles Azure, par exemple les bases de données SQL ou HANA. Lorsque le travail de sauvegarde d’une ressource protégée s’exécute, il crée un point de récupération à l’intérieur du coffre Recovery Services. Vous pouvez ensuite utiliser un de ces points de récupération pour restaurer des données à un moment donné dans le temps.

Créez un coffre Recovery Services avec la commande az backup vault create . Utilisez le même groupe de ressources et la même localisation que ceux de la machine virtuelle à protéger. Découvrez comment créer une machine virtuelle Windows et une machine virtuelle Linux à l’aide d’Azure CLI.

Pour cet article, nous allons utiliser :

  • Un groupe de ressources nommé SQLResourceGroup
  • Une machine virtuelle nommée testSQLVM
  • Des ressources ayant pour localisation westus2.

Exécutez la commande suivante pour créer un coffre nommé SQLVault.

az backup vault create --resource-group SQLResourceGroup \
    --name SQLVault \
    --location westus2

Par défaut, le coffre Recovery Services est défini pour le stockage géoredondant. Le stockage géoredondant garantit la réplication de vos données de sauvegarde vers une région Azure secondaire, même si celle-ci se trouve à des centaines de kilomètres de la région primaire. Si le paramètre de redondance de stockage doit être modifié, utilisez la commande az backup vault backup-properties set .

az backup vault backup-properties set \
    --name SQLVault  \
    --resource-group SQLResourceGroup \
    --backup-storage-redundancy "LocallyRedundant/GeoRedundant"

Pour vérifier si le coffre est correctement créé, utilisez la commande az backup vault list . La réponse se présente sous la forme suivante :

Location   Name             ResourceGroup
---------  ---------------  -------------  
westus2    SQLVault     	SQLResourceGroup

Inscrire et protéger le serveur SQL Server

Pour inscrire le serveur SQL Server auprès du coffre Recovery Services, utilisez la commande az backup container register. VMResourceId est l’ID de ressource de la machine virtuelle que vous avez créée pour installer SQL.

az backup container register --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --workload-type SQLDataBase \
    --backup-management-type AzureWorkload \
    --resource-id VMResourceId

Note

Si la machine virtuelle n’est pas présente dans le même groupe de ressources que le coffre, SQLResourceGroup utilise le groupe de ressources où le coffre a été créé.

L’inscription du serveur SQL Server permet de découvrir automatiquement toutes ses bases de données actuelles. Toutefois, pour découvrir les nouvelles bases de données qui pourraient être ajoutées à l'avenir, consultez la section Découverte de nouvelles bases de données ajoutées au serveur SQL inscrit.

Utilisez la commande az backup container list pour vérifier si l’instance SQL est correctement inscrite auprès de votre coffre. La réponse se présente sous la forme suivante :

Name                                                    Friendly Name    Resource Group        Type           Registration Status
------------------------------------------------------  --------------   --------------------  ---------      ----------------------
VMAppContainer;Compute;SQLResourceGroup;testSQLVM   	testSQLVM        SQLResourceGroup  		AzureWorkload  Registered

Note

Le nom de colonne dans la sortie ci-dessus fait référence au nom du conteneur. Ce nom de conteneur est utilisé dans les sections suivantes pour activer les sauvegardes et les déclencher. Par exemple, VMAppContainer ; Calculer; SQLResourceGroup ; testSQLVM.

Activer la sauvegarde sur la base de données SQL

La commande az backup protectable-item list répertorie toutes les bases de données découvertes sur l’instance SQL que vous avez inscrite à l’étape précédente.

az backup protectable-item list --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --workload-type SQLDataBase \
	--backup-management-type AzureWorkload \
	--protectable-item-type SQLDataBase \
    --output table

Vous devez rechercher dans cette liste la base de données à sauvegarder. La liste ressemble à ceci :

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  

À présent, configurez la sauvegarde pour sqldatabase ; mssqlserver ; base de données master.

Pour configurer et protéger les sauvegardes sur une base de données, utilisez la commande az backup protection enable-for-azurewl. Spécifiez le nom de la stratégie que vous voulez utiliser. Pour créer une stratégie à l’aide de l’interface CLI, utilisez la commande az backup policy create . Pour cet article, nous utilisons la politique 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

Vous pouvez utiliser la même commande si vous disposez d’un groupe de disponibilité SQL Always On et que vous souhaitez identifier la source de données pouvant être protégées dans le groupe de disponibilité. Ici, le type d’élément pouvant être protégé est SQLAG.

Pour vérifier si la configuration de sauvegarde ci-dessus est terminée, utilisez la commande az backup job list . La sortie se présente sous la forme suivante :

Name                                  Operation         Status     Item Name   Start Time UTC
------------------------------------  ---------------   ---------  ----------  -------------------  
e0f15dae-7cac-4475-a833-f52c50e5b6c3  ConfigureBackup   Completed  master         2019-12-03T03:09:210831+00:00  

La commande az backup job list répertorie tous les travaux de sauvegarde (planifiés ou à la demande) qui s’exécutent ou sont en cours d’exécution sur la base de données protégée, en plus d’autres opérations, telles que l’inscription, la configuration de la sauvegarde et la suppression des données de sauvegarde.

Note

Le service Sauvegarde Azure ne s’adapte pas automatiquement aux changements d’heure durant la sauvegarde d’une base de données SQL s’exécutant sur une machine virtuelle Azure.

Modifiez la stratégie manuellement en fonction des besoins.

Activer la protection automatique

Pour une configuration de sauvegarde transparente, toutes les bases de données ajoutées à l’avenir peuvent être automatiquement protégées par une certaine stratégie. Pour activer la protection automatique, utilisez la commande az backup protection auto-enable-for-azurewl .

Étant donné que l’instruction consiste à sauvegarder toutes les bases de données futures, l’opération est effectuée au niveau 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

Déclencher une sauvegarde à la demande

Pour déclencher une sauvegarde à la demande, utilisez la commande az backup protection backup-now .

Note

La période de conservation de cette sauvegarde est déterminée par le type de sauvegarde à la demande que vous avez exécuté.

  • À la demande, full conserve les sauvegardes pendant un minimum de 45 jours et un maximum de 99 ans.
  • La sauvegarde par copie complète uniquement à la demande accepte toutes les valeurs de conservation.
  • La sauvegarde différentielle à la demande est conservée conformément à la planification des sauvegardes différentielles définie dans la stratégie.
  • La sauvegarde de fichier journal à la demande est conservée conformément à la planification des sauvegardes de journaux définie dans la stratégie.
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

La sortie se présente sous la forme suivante :

Name                                  ResourceGroup
------------------------------------  -------------
e0f15dae-7cac-4475-a833-f52c50e5b6c3  sqlResourceGroup

La réponse vous fournit le nom du travail. Vous pouvez utiliser ce nom de travail pour suivre l’état du travail à l’aide de la commande az backup job show .

Configurer la sauvegarde d’instantané de l’instance SQL

Les exemples d’instantanés suivants utilisent la syntaxe shell PowerShell, incluant des backticks pour la continuation de ligne et le splatting de tableaux pour les arguments courants de la CLI. Ce ne sont pas des scripts Bash. Utilisez une version Azure CLI qui expose les options d’instantanés illustrées ici, et examinez la matrice de support des instantanés et les prérequis pour les instantanés.

Remplacez tous les espaces réservés avant d’exécuter une commande. Exécutez uniquement l’opération prévue ; les exemples sont des flux de travail séparés, pas un script unique à exécuter en entier.

Configurer les variables de sauvegarde d’instantané

Utilisez l’abonnement et le groupe de ressources du coffre, même si la VM est dans un autre abonnement :

$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

Préparer des fichiers de stratégie d'instantanés

Définissez $snapshotRg sur le nom réel du groupe de ressources snapshot. Cet exemple utilise la rétention quotidienne sur sept jours et la rétention des journaux, avec une rétention des instantanés sur cinq jours. La rétention quotidienne et la rétention des journaux doivent durer au moins sept jours ; la rétention des instantanés est configurée séparément.

Lisez l'identité managée affectée par l’utilisateur et créez l'objet de la stratégie :

$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" }
                }
            }
        )
    }
}

Sauvegardez la stratégie d'instantanés et de journaux avant de supprimer la sous-politique de journal pour créer un fichier séparé contenant uniquement l’instantané :

$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"

Créer des stratégies d'instantanés

Créez les deux stratégies à partir de leurs fichiers respectifs. Sélectionnez la stratégie adaptée à vos besoins de protection lors de l’activation de la sauvegarde :

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

Enregistrer la VM pour la protection des instances

Pour une VM dans un autre abonnement, fournissez son identifiant de ressource et l’abonnement du conteneur. L’alias optionnel --container-sub-id peut remplacer --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>"

Découvrez les instances pouvant être protégées

Discovery utilise MSSQL pour les composants SQL. Listez les composants, filtrez les instances par serveur, puis récupérez l’instance prévue :

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

Activer la protection des snapshots

Sélectionnez la politique d’instantanés et les bases de données utilisateurs à protéger :

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"

Déclenchez une sauvegarde par instantané à la demande

Listez les conteneurs enregistrés et les éléments protégés. Copiez leurs noms natifs exacts plutôt que de les reconstituer :

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

Utilisez le nom de la tâche retournée avec az backup job show pour suivre l’avancement. Pour les commandes de point de récupération et de restauration, voir Restaurer les instantanés d’instance SQL.

Étapes suivantes