Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek popisuje, jak pomocí Azure CLI obnovit databáze PostgreSQL na server Azure Database for PostgreSQL , který jste zálohovali prostřednictvím služby Azure Backup. Databázi PostgreSQL můžete obnovit také pomocí webu Azure Portal, Azure PowerShellu a rozhraní REST API.
Vzhledem k tomu, že databáze PostgreSQL je databáze typu platforma jako služba (PaaS), možnost obnovení Original-Location (OLR) nahrazením stávající databáze (z místa, kde byly zálohy pořízeny), není podporovaná. Pokud chcete vytvořit novou databázi na stejném serveru Azure Database for PostgreSQL nebo na jiném serveru PostgreSQL, můžete provést obnovení z bodu obnovení. Tato možnost se nazývá Alternate-Location Recovery (ALR). AlR pomáhá zachovat zdrojnou i obnovenou (novou) databázi.
Příklady v tomto článku odkazují na existující úložiště záloh pojmenované TestBkpVault ve skupině testBkpVaultRG prostředků.
Obnovení zálohované databáze PostgreSQL
Nastavení oprávnění
Trezor služby Backup používá spravovanou identitu pro přístup k dalším prostředkům Azure. K obnovení ze zálohy vyžaduje spravovaná identita trezoru služby Backup sadu oprávnění na serveru Azure Database for PostgreSQL, do kterého se má databáze obnovit.
Pokud chcete přiřadit příslušná oprávnění pro spravovanou identitu přiřazenou systémem trezoru na cílovém serveru PostgreSQL, podívejte se na sadu oprávnění potřebných k zálohování databáze PostgreSQL.
Pokud chcete obnovit bod obnovení jako soubory do úložného účtu, potřebuje spravovaná identita přiřazená systémem úložiště záloh přístup k cílovému úložnému účtu.
Získejte příslušný bod obnovení
Pokud chcete vypsat všechny instance zálohování v trezoru, použijte az dataprotection backup-instance list tento příkaz. Potom pomocí příkazu az dataprotection backup-instance show načtěte příslušnou instanci.
Alternativně pro scénáře ve velkém měřítku můžete pomocí příkazu vypsat instance zálohování napříč trezory a předplatnými 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
}
.
.
.
.
.
Po identifikaci instance načtěte odpovídající bod obnovení pomocí az dataprotection recovery-point list příkazu:
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"
}
Pokud potřebujete načíst bod obnovení z archivní úrovně, proměnná type v recoveryPointDataStoreDetails je ArchiveStore.
Připravte požadavek na obnovení
Pro databázi PostgreSQL existují různé možnosti obnovení. Bod obnovení můžete obnovit jako jinou databázi nebo obnovit jako soubory. Bod obnovení může být také na archivní úrovni.
Obnovení jako databáze
Pomocí cílového serveru PostgreSQL, ke kterému jste přiřadili oprávnění, vytvořte ID Azure Resource Manageru nové databáze PostgreSQL. Vytvořte také požadovaný název databáze PostgreSQL. Například databázi PostgreSQL lze pojmenovat emprestored21 pod cílovým serverem PostgreSQL pojmenovaným targetossserver ve skupině targetrg prostředků s jiným předplatným:
$targetOssId = "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourceGroups/targetrg/providers/providers/Microsoft.DBforPostgreSQL/servers/targetossserver/databases/emprestored21"
az dataprotection backup-instance restore initialize-for-data-recovery Pomocí příkazu připravte žádost o obnovení se všemi relevantními podrobnostmi:
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
V případě bodu obnovení založeného na archivu potřebujete:
- Obnovte z archivu úložiště dat do úložiště dat trezoru.
- Upravte zdrojové úložiště dat.
- Přidejte další parametry pro určení priority znovunaplnění.
- Zadejte dobu, po kterou se má bod obnovení po hydrataci zachovat v datovém úložišti trezoru.
- Obnovte databázi z tohoto bodu obnovení
Pomocí následujícího příkazu připravte požadavek na všechny dříve uvedené operace najednou:
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
Obnovit jako soubory
Načtěte identifikátor URI kontejneru v rámci účtu úložiště , ke kterému jste přiřadili oprávnění. Následující příklad používá kontejner pojmenovaný testcontainerrestore pod účtem úložiště s testossstorageaccount jiným předplatným:
$contURI = "https://testossstorageaccount.blob.core.windows.net/testcontainerrestore"
az dataprotection backup-instance restore initialize-for-data-recovery-as-files Pomocí příkazu připravte žádost o obnovení se všemi relevantními podrobnostmi:
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
V případě bodu obnovení, který je založen na archivu, v následujícím skriptu:
- Upravte zdrojové úložiště dat.
- Přidejte prioritu rehydratace a délku uchování (ve dnech) rehydratovaného bodu obnovení.
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
Pokud chcete ověřit, jestli bude soubor JSON úspěšný ve vytvoření nových prostředků, použijte příkaz az dataprotection backup-instance validate-for-restore.
Spustit obnovení
az dataprotection backup-instance restore trigger Pomocí příkazu aktivujte operaci obnovení s dříve připraveným požadavkem:
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
Sledování prací
Sledujte úlohy pomocí příkazu az dataprotection job list. Můžete vypsat všechny úlohy a získat podrobnosti o konkrétní úloze.
Můžete také použít Az.ResourceGraph ke sledování úloh ve všech trezorech služby Backup.
az dataprotection job list-from-resourcegraph Pomocí příkazu získáte příslušnou úlohu ve všech trezorech služby Backup:
az dataprotection job list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQL --operation Restore