Obnovení databází Azure PostgreSQL pomocí Azure CLI

Tento článek vysvětluje, jak obnovit databáze Azure PostgreSQL na server Azure PostgreSQL zálohovaný Azure Backup.

Jako databáze PaaS se nepodporuje možnost obnovení původního umístění (OLR) nahrazením stávající databáze (ze které byly zálohy pořízeny). Obnovením z bodu obnovení můžete vytvořit novou databázi na stejném serveru Azure PostgreSQL nebo na jiném serveru PostgreSQL. To se nazývá Alternate-Location Recovery (ALR), které pomáhá zachovat jak zdrojovou databázi, tak obnovenou (novou) databázi.

V tomto článku se naučíte:

  • Obnovením vytvoříte novou databázi PostgreSQL.

  • Sledování stavu operace obnovení

V příkladech budeme odkazovat na existující trezor služby Backup TestBkpVault v rámci skupiny prostředků testBkpVaultRG .

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 PostgreSQL, na které by se měla databáze obnovit.

Pokud chcete přiřadit příslušná oprávnění spravované identitě trezoru přiřazené systémem na cílovém serveru PostgreSQL, projděte si sadu oprávnění potřebných k zálohování databáze Azure PostgreSQL.

K obnovení bodu obnovení jako souborů do účtu úložiště potřebuje spravovaná identita trezoru služby Backup přiřazená systémem přístup k cílovému účtu úložiště.

Načtení příslušného bodu obnovení

Pokud chcete zobrazit seznam všech instancí zálohování v trezoru, použijte příkaz az dataprotection backup-instance list . Pak načtěte příslušnou instanci pomocí příkazu az dataprotection backup-instance show . Alternativně můžete pro scénáře ve velkém měřítku zobrazit seznam instancí zálohování napříč trezory a předplatnými pomocí příkazu 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-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
  }
.
.
.
.
.

Po identifikaci instance načtěte příslušný bod obnovení pomocí příkazu 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/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"
}

Pokud potřebujete načíst bod obnovení z archivní vrstvy, proměnná typu v recoveryPointDataStoreDetails bude ArchiveStore.

Příprava žádosti o obnovení

Pro databázi PostgreSQL existují různé možnosti obnovení. Bod obnovení můžete obnovit jako jinou databázi nebo jako soubory. Bod obnovení může být také na archivní úrovni.

Obnovit jako databázi

Vytvořte ID azure Resource Manager (ARM) nové databáze PostgreSQL. Musíte ho vytvořit s cílovým serverem PostgreSQL, ke kterému byla přiřazena oprávnění. Také vytvořte požadovaný název databáze PostgreSQL. Například databáze PostgreSQL může mít název emprestored21 v cílové skupině prostředků s jiným předplatným pod cílovým serverem PostgreSQL.

$targetOssId = "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourceGroups/targetrg/providers/providers/Microsoft.DBforPostgreSQL/servers/targetossserver/databases/emprestored21"

Pomocí příkazu az dataprotection backup-instance restore initialize-for-data-recovery 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

U bodu obnovení založeného na archivu je potřeba:

  1. Opětovné dosazování z archivu úložiště dat do úložiště trezoru
  2. Úprava zdrojového úložiště dat
  3. Přidání dalších parametrů pro určení priority dosazování
  4. Zadejte dobu, po kterou se má dosazovaný bod obnovení uchovávat v úložišti dat trezoru.
  5. Obnovení jako databáze z tohoto bodu obnovení

Pomocí následujícího příkazu připravte požadavek na všechny výše 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

Obnovení souborů

Načtěte identifikátor URI (Uniform Resource Identifier) kontejneru v rámci účtu úložiště, ke kterému byla přiřazena oprávnění. Například kontejner s názvem testcontainerrestore pod účtem úložiště testossstorageaccount s jiným předplatným.

$contURI = "https://testossstorageaccount.blob.core.windows.net/testcontainerrestore"

Pomocí příkazu az dataprotection backup-instance restore initialize-for-data-recovery-as-files 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í založeného na archivu použijte následující skript:

  • Upravte zdrojové úložiště dat.
  • Přidejte prioritu rehydrace a dobu uchování rehydrovaného bodu obnovení ve dnech.
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 soubor JSON úspěšně vytvoří nové prostředky, použijte příkaz az dataprotection backup-instance validate-for-restore .

Aktivace obnovení

Pomocí příkazu triggeru az dataprotection backup-instance restore 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-957d23b1-c679-4c94-ade6-c4d34635e149 --restore-request-object OssRestoreReq.JSON

Úloha sledování

Všechny úlohy můžete sledovat pomocí příkazu az dataprotection job list . Můžete zobrazit seznam všech úloh a načíst konkrétní podrobnosti úlohy.

Ke sledování úloh napříč všemi trezory služby Backup můžete použít také Az.ResourceGraph . Pomocí příkazu az dataprotection job list-from-resourcegraph získejte příslušnou úlohu, která je ve všech trezorech služby Backup.

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

Další kroky