Partager via


Restaurer des serveurs flexibles Azure Database pour PostgreSQL à l’aide d’Azure CLI

Cet article explique comment restaurer un serveur flexible Azure Database pour PostgreSQL à l’aide d’Azure CLI.

Remarque

L’option Récupération à l’emplacement d’origine (OLR) n’est pas prise en charge pour les bases de données PaaS. Utilisez plutôt la Récupération à un autre emplacement (ALR) pour restaurer à partir d’un point de récupération et créer une nouvelle base de données dans le même ou dans un autre serveur flexible Azure PostgreSQL, en conservant les bases de données sources et restaurées.

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

Conditions préalables

Avant de restaurer à partir des sauvegardes de serveur flexible Azure Database pour PostgreSQL, passez en revue les conditions préalables :

Remarque

Les données de sauvegarde sont stockées en tant que blob dans le coffre de sauvegarde dans le locataire Microsoft. Pendant une opération de restauration, les données de sauvegarde sont copiées d’un compte de stockage vers un autre entre les locataires.

Configurer les autorisations pour la restauration

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 flexible 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 flexible PostgreSQL cible, consultez l’ensemble d’autorisations nécessaires pour sauvegarder une base de données de serveur flexible 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.

Extraction du 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 appropriée à l’aide de la commande az dataprotection backup-instance show. Pour les scénarios à grande échelle, vous pouvez également répertorier les instances de sauvegarde dans les coffres et abonnements à l’aide de la commande az dataprotection backup-instance list-from-resourcegraph.

az dataprotection backup-instance list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQLFlexibleServer -subscriptions "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"

{
    "datasourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/testpostgresql/databases/empdb11",
    "extendedLocation": null,
    "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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/flexibleServers/databases",
        "objectType": "Datasource",
        "resourceID": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/testpostgresql/databases/empdb11",
        "resourceLocation": "westus",
        "resourceName": "postgres",
        "resourceProperties": null,
        "resourceType": "Microsoft.DBforPostgreSQL/flexibleServers/databases",
        "resourceUri": ""
      },
      "dataSourceProperties": null,
      "dataSourceSetInfo": {
        "baseUri": null,
        "datasourceType": "Microsoft.DBforPostgreSQL/flexibleServers/databases",
        "objectType": "DatasourceSet",
        "resourceID": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/testpostgresql",
        "resourceLocation": "westus",
        "resourceName": "testpostgresql",
        "resourceProperties": null,
        "resourceType": "Microsoft.DBforPostgreSQL/flexibleServers",
        "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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
    "tags": null,
    "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
    "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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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"
}

Préparer la demande de restauration

Vous pouvez restaurer le point de récupération d’une base de données de serveur flexible PostgreSQL en tant que fichiers uniquement.

Restaurer sous forme de fichiers

Récupérez l’URI (Uniform Resource Identifier) du conteneur dans le compte de stockage auquel 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 AzureDatabaseForPostgreSQLFlexibleServer  --restore-location {location} --source-datastore VaultStore -target-blob-container-url $contURI --target-file-name "empdb11_postgresql-westus_1628853549768" --recovery-point-id 9da55e757af94261afa009b43cd3222a > OssRestoreAsFilesReq.JSON

Remarque

Une fois la restauration sur le compte de stockage cible terminée, vous pouvez utiliser l’utilitaire pg_restore pour restaurer une base de données de serveur flexible Azure Database pour PostgreSQL à partir de la cible.

Utilisez la commande suivante pour vous connecter à un serveur flexible PostgreSQL existant et à une base de données existante :

pg_restore -h <hostname> -U <username> -d <db name> -Fd -j <NUM> -C <dump directory>

Dans ce script :

  • Fd : format de répertoire.
  • -j : nombre de travaux.
  • -C : démarre la sortie avec une commande pour créer la base de données elle-même, puis vous y reconnecter.

L’exemple suivant décrit la manière dont la syntaxe s’affiche :

pg_restore -h <hostname> -U <username> -j <Num of parallel jobs> -Fd -C -d <databasename> sampledb_dir_format

Si vous avez plusieurs bases de données à restaurer, réexécutez la commande précédente pour chaque base de données. En outre, à l’aide de plusieurs travaux simultanés -j, vous pouvez réduire le temps nécessaire à la restauration d’une base de données volumineuse sur un serveur cible multi-vCore. Le nombre de travaux peut être égal ou inférieur au nombre de vCPUs alloués pour le serveur cible.

Déclencher la restauration

Pour déclencher l’opération de restauration avec la requête préparée, utilisez la commande az dataprotection backup-instance restore trigger.

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

Suivre les travaux

Suivez tous les travaux à l’aide de la commande az dataprotection job list. Vous pouvez lister tous les travaux et récupérer les détails d’un travail en particulier.

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

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

Étapes suivantes

Résoudre les erreurs courantes des opérations de sauvegarde et de restauration d’un serveur flexible Azure Database pour PostgreSQL.