Partager via


Restaurer des bases de données Azure PostgreSQL avec Azure CLI

Cet article explique comment restaurer des bases de données Azure PostgreSQL sur un serveur Azure PostgreSQL sauvegardé par la Sauvegarde Azure.

Comme il s’agit d’une base de données PaaS, l’option Récupération à l’emplacement d’origine (OLR), qui permet d’effectuer la restauration en remplaçant la base de données existante (d’où ont été effectuées les sauvegardes), n’est pas prise en charge. Vous pouvez effectuer une restauration à partir d’un point de récupération pour créer une base de données dans le même serveur Azure PostgreSQL ou dans n’importe quel autre serveur PostgreSQL. Cette dernière procédure est appelée Récupération à un autre emplacement (ALR). Elle permet de conserver à la fois la base de données source et la (nouvelle) base de données restaurée.

Utilisons ici un coffre de sauvegarde existant, TestBkpVault, sous le groupe de ressources testBkpVaultRG dans les exemples.

Restaurer une base de données PostgreSQL sauvegardée

Définir des autorisations

Le coffre Sauvegarde utilise l’identité managée pour accéder à d’autres ressources Azure. Pour effectuer la restauration à partir d’une sauvegarde, l’identité managée du coffre de sauvegarde a besoin d’un ensemble d’autorisations sur le serveur Azure PostgreSQL où la base de données doit être restaurée.

Pour attribuer les autorisations appropriées à l’identité managée affectée par le système du coffre sur le serveur PostgreSQL cible, consultez l’ensemble d’autorisations nécessaires pour sauvegarder une base de données Azure PostgreSQL.

Pour restaurer le point de récupération sous forme de fichiers dans un compte de stockage, l’identité managée affectée par le système du coffre de sauvegarde a besoin d’accéder au compte de stockage cible.

Récupérer le point de récupération approprié

Pour répertorier toutes les instances de sauvegarde dans un coffre, utilisez la commande az dataprotection backup-instance list. Récupérer ensuite l’instance pertinente à l’aide de la commande az dataprotection backup-instance show. Pour les scénarios à grande échelle, vous pouvez également lister les instances de sauvegarde de plusieurs coffres et abonnements en utilisant la commande az dataprotection backup-instance list-from-resourcegraph.

az dataprotection backup-instance list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQL -subscriptions "xxxxxxxx-xxxx-xxxx-xxxx"

  {
    "datasourceId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/servers/testpostgresql/databases/empdb11",
    "extendedLocation": null,
    "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupInstances/testpostgresql-empdb11-957d23b1-c679-4c94-ade6-c4d34635e149",
    "identity": null,
    "kind": "",
    "location": "",
    "managedBy": "",
    "name": "testpostgresql-empdb11-957d23b1-c679-4c94-ade6-c4d34635e149",
    "plan": null,
    "properties": {
      "currentProtectionState": "ProtectionConfigured",
      "dataSourceInfo": {
        "baseUri": null,
        "datasourceType": "Microsoft.DBforPostgreSQL/servers/databases",
        "objectType": "Datasource",
        "resourceID": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/servers/testpostgresql/databases/empdb11",
        "resourceLocation": "westus",
        "resourceName": "postgres",
        "resourceProperties": null,
        "resourceType": "Microsoft.DBforPostgreSQL/servers/databases",
        "resourceUri": ""
      },
      "dataSourceProperties": null,
      "dataSourceSetInfo": {
        "baseUri": null,
        "datasourceType": "Microsoft.DBforPostgreSQL/servers/databases",
        "objectType": "DatasourceSet",
        "resourceID": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/servers/testpostgresql",
        "resourceLocation": "westus",
        "resourceName": "testpostgresql",
        "resourceProperties": null,
        "resourceType": "Microsoft.DBforPostgreSQL/servers",
        "resourceUri": ""
      },
      "datasourceAuthCredentials": {
        "objectType": "SecretStoreBasedAuthCredentials",
        "secretStoreResource": {
          "secretStoreType": "AzureKeyVault",
          "uri": "https://vikottur-test.vault.azure.net/secrets/dbauth3",
          "value": null
        }
      },
      "friendlyName": "testpostgresql\\empdb11",
      "objectType": "BackupInstance",
      "policyInfo": {
        "policyId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupPolicies/osspol3",
        "policyParameters": null,
        "policyVersion": ""
      },
      "protectionErrorDetails": null,
      "protectionStatus": {
        "errorDetails": null,
        "status": "ProtectionConfigured"
      },
      "provisioningState": "Succeeded",
      "validationType": null
    },
    "protectionState": "ProtectionConfigured",
    "resourceGroup": "testBkpVaultRG",
    "sku": null,
    "subscriptionId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "tags": null,
    "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "type": "microsoft.dataprotection/backupvaults/backupinstances",
    "vaultName": "testBkpVault",
    "zones": null
  }
.
.
.
.
.

Une fois l’instance identifiée, extrayez le point de récupération approprié à l’aide de la commande az dataprotection recovery-point list.

az dataprotection recovery-point list --backup-instance-name testpostgresql-empdb11-957d23b1-c679-4c94-ade6-c4d34635e149 -g testBkpVaultRG --vault-name TestBkpVault

{
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupInstances/testpostgresql-empdb11-957d23b1-c679-4c94-ade6-c4d34635e149/recoveryPoints/9da55e757af94261afa009b43cd3222a",
  "name": "9da55e757af94261afa009b43cd3222a",
  "properties": {
    "friendlyName": "2031fdb43a914114b6ce644eb6fcb5ce",
    "objectType": "AzureBackupDiscreteRecoveryPoint",
    "policyName": "oss-clitest-policy",
    "policyVersion": null,
    "recoveryPointDataStoresDetails": [
      {
        "creationTime": "2021-09-13T15:17:41.209845+00:00",
        "expiryTime": null,
        "id": "beddea84-7b30-42a5-a752-7c75baf96a52",
        "metaData": "{\"objectType\":\"PostgresBackupMetadata\",\"version\":\"1.0\",\"postgresVersion\":\"11\",\"dbName\":\"postgres\",\"serverName\":\"testpostgresql\",\"serverFQDN\":\"testpostgresql.postgres.database.azure.com\",\"usernameUsed\":\"backupadmin@testpostgresql\",\"backupToolPath\":\"postgresql-11.6-1\\\\bin\\\\pg_dump.exe\",\"backupType\":\"Full\",\"backupDumpFormat\":\"CUSTOM\",\"backupToolArgsFormat\":\"--no-acl --no-owner --serializable-deferrable --no-tablespaces --quote-all-identifiers -Fc -d postgres://{0}:{1}@{2}:5432/{3}?sslmode=verify-full&sslrootcert=E:\\\\approot\\\\Plugins\\\\Postgres\\\\..\\\\..\\\\postgres-root.crt\",\"storageUnits\":{\"1\":\"DbBackupDumpData\"},\"streamNamesInFirstStorageUnit\":[\"dbbkpdmpdatastream-1631546260050\"],\"pitId\":\"2031fdb43a914114b6ce644eb6fcb5ce\",\"bytesTransferred\":2063,\"dataSourceSize\":8442527,\"backupToolVersion\":\"11\"}",
        "rehydrationExpiryTime": null,
        "rehydrationStatus": null,
        "state": "COMMITTED",
        "type": "VaultStore",
        "visible": true
      }
    ],
    "recoveryPointId": "9da55e757af94261afa009b43cd3222a",
    "recoveryPointTime": "2021-09-13T15:17:41.209845+00:00",
    "recoveryPointType": "Full",
    "retentionTagName": "default",
    "retentionTagVersion": "637671427933449525"
  },
  "resourceGroup": "testBkpVaultRG",
  "systemData": null,
  "type": "Microsoft.DataProtection/backupVaults/backupInstances/recoveryPoints"
}

Si vous avez besoin de récupérer le point de récupération dans le niveau archive, la variable type dans recoveryPointDataStoreDetails est ArchiveStore.

Préparer la demande de restauration

Il existe différentes options de restauration pour une base de données PostgreSQL. Vous pouvez restaurer le point de récupération sous la forme d’une autre base de données ou de fichiers. Il peut également se trouver dans le niveau archive.

Restaurer en tant que base de données

Créez l’ID Azure Resource Manager (ID ARM) de la nouvelle base de données PostgreSQL. Vous devez créer ceci avec le serveur PostgreSQL cible auquel les autorisations ont été attribuées. Vous pouvez également créer le nom de base de données PostgreSQL requis. Par exemple, une base de données PostgreSQL peut être nommée emprestored21 sous un serveur PostgreSQL cible targetossserver dans le groupe de ressources targetrg avec un autre abonnement.

$targetOssId = "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourceGroups/targetrg/providers/providers/Microsoft.DBforPostgreSQL/servers/targetossserver/databases/emprestored21"

Utilisez la commande az dataprotection backup-instance restore initialize-for-data-recovery pour préparer la demande de restauration avec tous les détails appropriés.

az dataprotection backup-instance restore initialize-for-data-recovery --datasource-type AzureDatabaseForPostgreSQL  --restore-location {location} --source-datastore VaultStore --target-resource-id $targetOssId --recovery-point-id 9da55e757af94261afa009b43cd3222a --secret-store-type AzureKeyVault --secret-store-uri "https://restoreoss-test.vault.azure.net/secrets/dbauth3" > OssRestoreReq.JSON

Pour un point de récupération basé sur une archive, vous devez :

  1. Réhydrater la base de données du magasin de données d’archive dans le magasin du coffre
  2. Modifier le magasin de données source
  3. Ajouter d’autres paramètres pour spécifier la priorité de réhydratation
  4. Spécifier la durée pendant laquelle le point de récupération réhydraté doit être conservé dans le magasin de données du coffre
  5. Effectuer la restauration sous forme de base de données à partir de ce point de récupération

Utilisez la commande suivante afin de préparer la requête pour toutes les opérations mentionnées précédemment, en même temps.

az dataprotection backup-instance restore initialize-for-data-recovery --datasource-type AzureDatabaseForPostgreSQL  --restore-location {location} --source-datastore ArchiveStore --target-resource-id $targetOssId --recovery-point-id 9da55e757af94261afa009b43cd3222a --secret-store-type AzureKeyVault --secret-store-uri "https://restoreoss-test.vault.azure.net/secrets/dbauth3" --rehydration-priority Standard --rehydration-duration 12 > OssRestoreFromArchiveReq.JSON

Restaurer sous forme de fichiers

Récupérez l’URI (Uniform Resource Identifier) du conteneur dans le compte de stockage a quoi les autorisations ont été attribuées. Par exemple, un conteneur nommé testcontainerrestore sous un compte de stockage testossstorageaccount avec un autre abonnement.

$contURI = "https://testossstorageaccount.blob.core.windows.net/testcontainerrestore"

Utilisez la commande az dataprotection backup-instance restore initialize-for-data-recovery-as-files pour préparer la demande de restauration avec tous les détails appropriés.

az dataprotection backup-instance restore initialize-for-data-recovery-as-files --datasource-type AzureDatabaseForPostgreSQL  --restore-location {location} --source-datastore VaultStore -target-blob-container-url $contURI --target-file-name "empdb11_postgresql-westus_1628853549768" --recovery-point-id 9da55e757af94261afa009b43cd3222a > OssRestoreAsFilesReq.JSON

Pour le point de récupération basé sur l’archive, dans le script suivant :

  • Modifier le magasin de données source
  • Ajoutez la priorité de réhydratation et la durée de rétention, en jours, du point de récupération réhydraté.
az dataprotection backup-instance restore initialize-for-data-recovery-as-files --datasource-type AzureDatabaseForPostgreSQL  --restore-location {location} --source-datastore ArchiveStore -target-blob-container-url $contURI --target-file-name "empdb11_postgresql-westus_1628853549768" --recovery-point-id 9da55e757af94261afa009b43cd3222a --rehydration-priority Standard --rehydration-duration 12 > OssRestoreAsFilesReq.JSON

Pour valider si le fichier JSON peut créer des ressources, utilisez la commande az dataprotection backup-instance validate-for-restore.

Déclencher la restauration

Utilisez la commande az dataprotection backup-instance restore trigger pour déclencher l’opération de restauration avec la requête préparée précédemment.

az dataprotection backup-instance restore trigger -g testBkpVaultRG --vault-name TestBkpVault --backup-instance-name testpostgresql-empdb11-957d23b1-c679-4c94-ade6-c4d34635e149 --restore-request-object OssRestoreReq.JSON

Suivi des travaux

Effectuez le suivi de tous les travaux à l’aide de la commande az dataprotection job list. Vous pouvez répertorier tous les travaux et extraire le détail d’un travail particulier.

Vous pouvez aussi utiliser Az.ResourceGraph pour suivre les travaux dans l’ensemble des coffres de sauvegarde. Utilisez la commande az dataprotection job list-from-resourcegraph pour obtenir le travail approprié sur l’ensemble des coffres de sauvegarde.

az dataprotection job list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQL --operation Restore

Étapes suivantes