Delen via


PostgreSQL-databases herstellen met behulp van de Azure CLI

In dit artikel wordt beschreven hoe u de Azure CLI gebruikt om PostgreSQL-databases te herstellen naar een Azure Database for PostgreSQL-server waarvan u een back-up hebt gemaakt via Azure Backup. U kunt ook een PostgreSQL-database herstellen met behulp van Azure Portal, Azure PowerShell en REST API.

Omdat een PostgreSQL-database een PaaS-database (Platform as a Service) is, wordt de optie Original-Location Recovery (OLR) om te herstellen 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 Database for PostgreSQL-server of op een andere PostgreSQL-server. Deze optie wordt Alternate-Location Recovery (ALR) genoemd. ALR helpt bij het behouden van zowel de brondatabase als de herstelde (nieuwe) database.

De voorbeelden in dit artikel verwijzen naar een bestaande Back-upkluis met de naam TestBkpVault onder de resourcegroep testBkpVaultRG.

Een back-up van een PostgreSQL-database herstellen

Machtigingen instellen

Een Backup-kluis maakt gebruik van een beheerde identiteit voor toegang tot andere Azure-resources. Als u wilt herstellen vanuit een back-up, vereist de beheerde identiteit van de Backup-kluis een set machtigingen op de Azure Database for PostgreSQL-server waarnaar de database moet worden hersteld.

Als u de relevante machtigingen wilt toewijzen voor de door het systeem toegewezen beheerde identiteit van een kluis op de PostgreSQL-doelserver, raadpleegt u de set machtigingen die nodig zijn om een back-up te maken van een 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

Gebruik het az dataprotection backup-instance list commando om alle back-ups in een kluis weer te geven. Haal vervolgens het relevante exemplaar op met behulp van de az dataprotection backup-instance show opdracht.

Als alternatief kunt u voor scenario's op schaal ook back-upexemplaren in kluizen en abonnementen weergeven met behulp van de az dataprotection backup-instance list-from-resourcegraph opdracht.

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
  }
.
.
.
.
.

Nadat u het exemplaar hebt geïdentificeerd, haalt u het relevante herstelpunt op met behulp van de az dataprotection recovery-point list opdracht:

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 uit de archieflaag moet ophalen, is de type variabele in recoveryPointDataStoreDetailsArchiveStore.

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 op de archieflaag bevinden.

Herstellen als een database

Maak de Azure Resource Manager-id van de nieuwe PostgreSQL-database met behulp van de PostgreSQL-doelserver waaraan u machtigingen hebt toegewezen. Maak ook de vereiste PostgreSQL-databasenaam. Een PostgreSQL-database kan bijvoorbeeld worden benoemd emprestored21 onder een postgreSQL-doelserver met de naam targetossserver in de resourcegroep targetrg met een ander abonnement:

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

Gebruik de az dataprotection backup-instance restore initialize-for-data-recovery opdracht 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:

  1. Rehydrateer uit het archiefgegevensarchief naar het gegevensarchief van de kluis.
  2. Wijzig het brongegevensarchief.
  3. Voeg andere parameters toe om de prioriteit van rehydratie te specificeren.
  4. Geef de duur op waarvoor het gerehydrateerde herstelpunt moet worden bewaard in de datakluis.
  5. Herstel de database vanaf dit herstelpunt.

Gebruik de volgende opdracht om de aanvraag voor te bereiden op alle eerder genoemde bewerkingen tegelijk:

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 van de container op binnen het opslagaccount waaraan u machtigingen hebt toegewezen. In het volgende voorbeeld wordt een container gebruikt met de naam testcontainerrestore onder een opslagaccount testossstorageaccount met een ander abonnement:

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

Gebruik de az dataprotection backup-instance restore initialize-for-data-recovery-as-files opdracht 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 het op archief gebaseerde herstelpunt, 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

Gebruik de az dataprotection backup-instance validate-for-restore opdracht om te controleren of het JSON-bestand slaagt in het maken van nieuwe resources.

De herstelbewerking activeren

Gebruik de az dataprotection backup-instance restore trigger opdracht 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

Banen bijhouden

Taken bijhouden met behulp van de az dataprotection job list opdracht. U kunt alle taken weergeven en een bepaalde taakdetails ophalen.

U kunt ook Az.ResourceGraph taken bijhouden in alle Backup-kluizen. Gebruik de az dataprotection job list-from-resourcegraph opdracht om de relevante taak op te halen die zich in alle Backup-kluizen bevinden:

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