Azure PostgreSQL-adatbázisok visszaállítása az Azure CLI használatával
Ez a cikk bemutatja, hogyan állíthatja vissza az Azure PostgreSQL-adatbázisokat egy Azure PostgreSQL-kiszolgálóra, amelyről az Azure Backup készít biztonsági másolatot.
PaaS-adatbázisként nem támogatott az Eredeti hely helyreállítása (OLR) lehetőség a meglévő adatbázis lecserélésével (ahonnan a biztonsági másolatok készültek). A helyreállítási pontról visszaállítva létrehozhat egy új adatbázist ugyanabban az Azure PostgreSQL-kiszolgálón vagy bármely más PostgreSQL-kiszolgálón, amelyet alternatív helyalapú helyreállításnak (ALR) hívunk, amely segít megőrizni mind a forrásadatbázist, mind a visszaállított (új) adatbázist.
A példákban egy meglévő Backup-tárolót, a TestBkpVaultot használjuk a testBkpVaultRG erőforráscsoport alatt.
Biztonsági másolatban létrehozott PostgreSQL-adatbázis visszaállítása
Engedélyek beállítása
A Backup-tároló felügyelt identitással fér hozzá más Azure-erőforrásokhoz. A biztonsági mentésből való visszaállításhoz a Backup-tároló felügyelt identitásához engedélykészlet szükséges azon az Azure PostgreSQL-kiszolgálón, amelyre az adatbázist vissza kell állítani.
A tároló rendszer által hozzárendelt felügyelt identitásának megfelelő engedélyek hozzárendeléséhez a cél PostgreSQL-kiszolgálón tekintse meg az Azure PostgreSQL-adatbázis biztonsági mentéséhez szükséges engedélyeket.
Ha fájlként szeretné visszaállítani a helyreállítási pontot egy tárfiókba, a Backup-tároló rendszer által hozzárendelt felügyelt identitásának hozzáférésre van szüksége a céltárfiókhoz.
A megfelelő helyreállítási pont beolvasása
A tárolón belüli összes biztonsági mentési példány listázásához használja az az dataprotection backup-instance list parancsot. Ezután kérje le a megfelelő példányt az az dataprotection backup-instance show paranccsal. A nagy léptékű forgatókönyvek esetében az az dataprotection backup-instance list-from-resourcegraph paranccsal is listázhatja a tárolók és előfizetések biztonsági mentési példányait.
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
}
.
.
.
.
.
A példány azonosítása után kérje le a megfelelő helyreállítási pontot az az dataprotection recovery-point list paranccsal.
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"
}
Ha le kell kérnie a helyreállítási pontot az archív szintről, akkor a recoveryPointDataStoreDetails típusváltozója az ArchiveStore lesz.
A visszaállítási kérelem előkészítése
A PostgreSQL-adatbázisokhoz különböző visszaállítási lehetőségek állnak rendelkezésre. A helyreállítási pontot visszaállíthatja egy másik adatbázisként, vagy visszaállíthatja fájlként. A helyreállítási pont az archív szinten is lehet.
Visszaállítás adatbázisként
Hozza létre az új PostgreSQL-adatbázis Azure Resource Manager-azonosítóját (ARM-azonosítóját). Ezt azzal a cél PostgreSQL-kiszolgálóval kell létrehoznia, amelyhez engedélyek lettek hozzárendelve. Emellett hozza létre a szükséges PostgreSQL-adatbázisnevet is. Például egy PostgreSQL-adatbázis neve emprestored21 lehet egy cél PostgreSQL-kiszolgáló targetossserver alatt egy másik előfizetéssel rendelkező erőforráscsoport targetossserverében.
$targetOssId = "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourceGroups/targetrg/providers/providers/Microsoft.DBforPostgreSQL/servers/targetossserver/databases/emprestored21"
Az az dataprotection backup-instance restore initialize-for-data-recovery paranccsal készítse elő a visszaállítási kérelmet az összes releváns részlettel.
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
Archív helyreállítási pont esetén a következőkre van szükség:
- Rehidratálás archív adattárból tárolótárolóba
- A forrásadattár módosítása
- További paraméterek hozzáadása a rehidratálási prioritás megadásához
- Adja meg azt az időtartamot, amelyre a rehidratált helyreállítási pontot meg kell őrizni a tároló adattárában
- Visszaállítás adatbázisként ebből a helyreállítási pontból
A következő paranccsal egyszerre készítse elő a kérést az összes korábban említett művelethez.
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
Visszaállítás fájlokként
Kérje le a tároló egységes erőforrás-azonosítóját (URI) azon tárfiókon belül, amelyhez engedélyek lettek hozzárendelve. Egy testcontainerrestore nevű tároló például egy másik előfizetéssel rendelkező testossstorageaccount tárfiók alatt.
$contURI = "https://testossstorageaccount.blob.core.windows.net/testcontainerrestore"
Az az dataprotection backup-instance restore initialize-for-data-recovery-as-files paranccsal készítse elő a visszaállítási kérést az összes releváns részlettel.
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
Archiválási alapú helyreállítási pont esetén a következő szkriptben:
- Módosítsa a forrásadattárat.
- Adja hozzá a rehidratálási prioritást és a rehidratált helyreállítási pont megőrzési időtartamát napokban.
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
Annak ellenőrzéséhez, hogy a JSON-fájlnak sikerül-e új erőforrásokat létrehoznia, használja az az dataprotection backup-instance validate-for-restore parancsot.
A visszaállítás aktiválása
Az az dataprotection backup-instance restore trigger paranccsal aktiválhatja a visszaállítási műveletet a korábban előkészített kéréssel.
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
Nyomon követési feladat
Kövesse nyomon az összes feladatot az az dataprotection feladatlista paranccsal. Listázhatja az összes feladatot, és lekérhet egy adott feladatrészletet.
Az Az.ResourceGraph használatával az összes Backup-tárolóban nyomon követheti a feladatokat. Az az dataprotection job list-from-resourcegraph paranccsal szerezze be az összes Backup-tárolóban található megfelelő feladatot.
az dataprotection job list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQL --operation Restore