Azure PostgreSQL-databases herstellen met behulp van Azure CLI
In dit artikel wordt uitgelegd hoe u Azure PostgreSQL-databases herstelt naar een Azure PostgreSQL-server waarvan een back-up wordt gemaakt door Azure Backup.
Als PaaS-database wordt de OLR-optie (Original Location Recovery) niet ondersteund door de bestaande database (van waaruit de back-ups zijn gemaakt) te vervangen. U kunt herstellen vanaf een herstelpunt om een nieuwe database te maken op dezelfde Azure PostgreSQL-server of op een andere PostgreSQL-server, die alternatieve locatieherstel (ALR) wordt genoemd, waarmee u zowel de brondatabase als de herstelde (nieuwe) database kunt behouden.
Hier gaan we een bestaande Backup Vault TestBkpVault gebruiken onder de resourcegroep testBkpVaultRG in de voorbeelden.
Een back-up van een PostgreSQL-database herstellen
Machtigingen instellen
Backup Vault maakt gebruik van een beheerde identiteit voor toegang tot andere Azure-resources. Als u een back-up wilt herstellen, vereist de beheerde identiteit van de Back-upkluis een set machtigingen op de Azure PostgreSQL-server waarnaar de database moet worden hersteld.
Als u de relevante machtigingen wilt toewijzen voor de door het systeem toegewezen beheerde identiteit van de kluis op de PostgreSQL-doelserver, raadpleegt u de set machtigingen die nodig zijn om een back-up te maken van de Azure PostgreSQL-database.
Als u het herstelpunt als bestanden wilt herstellen naar een opslagaccount, moet de door het systeem toegewezen beheerde identiteit van de Backup-kluis toegang hebben tot het doelopslagaccount.
Het relevante herstelpunt ophalen
Als u alle back-upexemplaren in een kluis wilt weergeven, gebruikt u de opdracht az dataprotection backup-instance list . Haal vervolgens het relevante exemplaar op met behulp van de opdracht az dataprotection backup-instance show . Voor scenario's op schaal kunt u ook back-upexemplaren weergeven tussen kluizen en abonnementen met behulp van de opdracht 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
}
.
.
.
.
.
Zodra het exemplaar is geïdentificeerd, haalt u het relevante herstelpunt op met behulp van de opdracht az dataprotection recovery-point list .
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"
}
Als u het herstelpunt wilt ophalen uit de archieflaag, is de typevariabele in recoveryPointDataStoreDetails ArchiveStore.
De herstelaanvraag voorbereiden
Er zijn verschillende herstelopties voor een PostgreSQL-database. U kunt het herstelpunt herstellen als een andere database of als bestanden herstellen. Het herstelpunt kan zich ook in de archieflaag bevinden.
Herstellen als database
Maak de ARM-id (Azure Resource Manager ID) van de nieuwe PostgreSQL-database. U moet dit maken met de PostgreSQL-doelserver waaraan machtigingen zijn toegewezen. Maak ook de vereiste PostgreSQL-databasenaam. Een PostgreSQL-database kan bijvoorbeeld emprestored21 worden genoemd onder een doel-PostgreSQL-server targetossserver in resourcegroep targetrg met een ander abonnement.
$targetOssId = "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourceGroups/targetrg/providers/providers/Microsoft.DBforPostgreSQL/servers/targetossserver/databases/emprestored21"
Gebruik de opdracht az dataprotection backup-instance restore initialize-for-data-recovery om de herstelaanvraag voor te bereiden met alle relevante details.
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
Voor een herstelpunt op basis van een archief moet u het volgende doen:
- Rehydrateer van archiefgegevensarchief naar kluisopslag
- Het brongegevensarchief wijzigen
- Andere parameters toevoegen om de rehydratatieprioriteit op te geven
- Geef de duur op waarvoor het gerehydrateerde herstelpunt moet worden bewaard in het kluisgegevensarchief
- Herstellen als een database vanaf dit herstelpunt
Gebruik de volgende opdracht om de aanvraag voor alle eerder genoemde bewerkingen tegelijk voor te bereiden.
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
Herstellen als bestanden
Haal de URI (Uniform Resource Identifier) van de container op binnen het opslagaccount waaraan machtigingen zijn toegewezen. Bijvoorbeeld een container met de naam testcontainerrestore onder een testossstorageaccount van een opslagaccount met een ander abonnement.
$contURI = "https://testossstorageaccount.blob.core.windows.net/testcontainerrestore"
Gebruik de opdracht az dataprotection backup-instance restore initialize-for-data-recovery-as-files om de herstelaanvraag voor te bereiden met alle relevante details.
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
Voor herstelpunt op basis van een archief, in het volgende script:
- Wijzig het brongegevensarchief.
- Voeg de rehydratatieprioriteit en de bewaarduur, in dagen, van het gerehydrateerde herstelpunt toe.
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
Als u wilt controleren of het JSON-bestand slaagt om nieuwe resources te maken, gebruikt u de opdracht az dataprotection backup-instance validate-for-restore .
De herstelbewerking activeren
Gebruik de opdracht az dataprotection backup-instance restore trigger om de herstelbewerking te activeren met de eerder voorbereide aanvraag.
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
Traceringstaak
Volg alle taken met behulp van de opdracht az dataprotection job list . U kunt alle taken weergeven en een bepaalde taakdetails ophalen.
U kunt Az.ResourceGraph ook gebruiken om taken bij te houden in alle Backup-kluizen. Gebruik de opdracht az dataprotection job list-from-resourcegraph om de relevante taak op te halen die zich in alle Backup-kluizen bevindt.
az dataprotection job list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQL --operation Restore