Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article explique comment utiliser Azure CLI pour restaurer des bases de données PostgreSQL sur un serveur Azure Database pour PostgreSQL que vous avez sauvegardé via Sauvegarde Azure. Vous pouvez également restaurer une base de données PostgreSQL à l’aide du portail Azure, d’Azure PowerShell et de l’API REST.
Étant donné qu’une base de données PostgreSQL est une base de données PaaS (Platform as a Service), l’option Original-Location Recovery (OLR) à restaurer en remplaçant la base de données existante (à partir de laquelle les sauvegardes ont été effectuées) 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 Database pour PostgreSQL ou dans n’importe quel autre serveur PostgreSQL. Cette option est appelée Récupération d’emplacement alternatif (ALR). ALR permet de conserver à la fois la base de données source et la base de données restaurée (nouvelle).
Les exemples de cet article font référence à un coffre de sauvegarde existant nommé TestBkpVault
sous le groupe testBkpVaultRG
de ressources.
Restaurer une base de données PostgreSQL sauvegardée
Définir des autorisations
Un coffre de sauvegarde utilise une identité managée pour accéder à d’autres ressources Azure. Pour effectuer une restauration à partir d’une sauvegarde, l’identité managée du coffre de sauvegarde nécessite un ensemble d’autorisations sur le serveur Azure Database pour PostgreSQL sur lequel la base de données doit être restaurée.
Pour attribuer les autorisations appropriées pour l’identité managée affectée par le système d’un coffre sur le serveur PostgreSQL cible, consultez le ensemble d’autorisations nécessaires pour sauvegarder une base de données 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érez ensuite l’instance appropriée à l’aide de la az dataprotection backup-instance show
commande.
Par ailleurs, pour scénarios à grande échelle, vous pouvez répertorier les instances de sauvegarde entre les coffres et les abonnements à l’aide de 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-aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"identity": null,
"kind": "",
"location": "",
"managedBy": "",
"name": "testpostgresql-empdb11-aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"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
}
.
.
.
.
.
Après avoir identifié l’instance, récupérez le point de récupération approprié à l’aide de la az dataprotection recovery-point list
commande :
az dataprotection recovery-point list --backup-instance-name testpostgresql-empdb11-aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e -g testBkpVaultRG --vault-name TestBkpVault
{
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupInstances/testpostgresql-empdb11-aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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 d’extraire le point de récupération à partir du niveau archive, la type
variable est recoveryPointDataStoreDetails
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. Le point de récupération peut également se trouver sur le niveau Archive.
Restaurer comme base de données
Construisez l’ID Azure Resource Manager de la nouvelle base de données PostgreSQL à l’aide du serveur PostgreSQL cible auquel vous avez attribué des autorisations. 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 nommé targetossserver
dans le groupe targetrg
de ressources avec un autre abonnement :
$targetOssId = "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourceGroups/targetrg/providers/providers/Microsoft.DBforPostgreSQL/servers/targetossserver/databases/emprestored21"
Utilisez la az dataprotection backup-instance restore initialize-for-data-recovery
commande pour préparer la demande de restauration avec tous les détails pertinents :
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 :
- Réalimentez du magasin de données d’archive vers le magasin de données du coffre.
- Modifier le magasin de données source
- Ajouter d’autres paramètres pour spécifier la priorité de réhydratation
- Spécifiez la durée pendant laquelle le point de récupération réhydraté doit être conservé dans le magasin de données du coffre.
- Effectuer la restauration sous forme de base de données à partir de ce point de récupération
Utilisez la commande suivante pour préparer la demande pour toutes les opérations mentionnées précédemment à la fois :
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 du conteneur dans le compte de stockage auquel vous avez attribué des autorisations. L’exemple suivant utilise un conteneur nommé testcontainerrestore
sous un compte de stockage nommé testossstorageaccount
avec un autre abonnement :
$contURI = "https://testossstorageaccount.blob.core.windows.net/testcontainerrestore"
Utilisez la az dataprotection backup-instance restore initialize-for-data-recovery-as-files
commande pour préparer la demande de restauration avec tous les détails pertinents :
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 vérifier si le fichier JSON réussit à créer de nouvelles ressources, utilisez la az dataprotection backup-instance validate-for-restore
commande.
Déclencher la restauration
Utilisez la commande pour déclencher l’opération az dataprotection backup-instance restore trigger
de restauration avec la demande préparée précédemment :
az dataprotection backup-instance restore trigger -g testBkpVaultRG --vault-name TestBkpVault --backup-instance-name testpostgresql-empdb11-aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e --restore-request-object OssRestoreReq.JSON
Suivre les travaux
Effectuez le suivi des travaux à l’aide de la az dataprotection job list
commande. Vous pouvez répertorier tous les travaux et extraire le détail d’un travail 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é dans tous les coffres de sauvegarde :
az dataprotection job list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQL --operation Restore