Freigeben über


Wiederherstellen von PostgreSQL-Datenbanken mithilfe der Azure CLI

In diesem Artikel wird beschrieben, wie Sie die Azure CLI verwenden, um PostgreSQL-Datenbanken in einer Azure-Datenbank für PostgreSQL-Server wiederherzustellen, die Sie über Azure Backup gesichert haben. Sie können eine PostgreSQL-Datenbank auch mithilfe von Azure-Portal, Azure PowerShell und REST-API wiederherstellen.

Da es sich bei einer PostgreSQL-Datenbank um eine Plattform als Dienst(PaaS)-Datenbank handelt, wird die option Original-Location Recovery (OLR) zum Wiederherstellen durch Ersetzen der vorhandenen Datenbank (von wo aus die Sicherungen übernommen wurden) nicht unterstützt. Sie können aus einem Wiederherstellungspunkt wiederherstellen, um eine neue Datenbank in derselben Azure-Datenbank für PostgreSQL-Server oder auf einem beliebigen anderen PostgreSQL-Server zu erstellen. Diese Option wird als Alternate-Location Recovery (ALR) bezeichnet. ALR hilft dabei, sowohl die Quelldatenbank als auch die wiederhergestellte (neue) Datenbank beizubehalten.

Die Beispiele in diesem Artikel beziehen sich auf einen vorhandenen Sicherungstresor namens TestBkpVault, der zur Ressourcengruppe testBkpVaultRG gehört.

Wiederherstellung einer gesicherten PostgreSQL-Datenbank

Einrichten von Berechtigungen

Ein Sicherungstresor verwendet eine verwaltete Identität, um auf andere Azure-Ressourcen zuzugreifen. Zur Wiederherstellung aus einer Sicherung benötigt die verwaltete Identität des Backup-Tresors verschiedene Berechtigungen auf dem Azure Database for PostgreSQL-Server, auf dem die Datenbank wiederhergestellt werden soll.

Weitere Informationen zum Zuweisen der relevanten Berechtigungen für eine systemseitig zugewiesene verwaltete Identität des Tresors auf dem PostgreSQL-Zielserver finden Sie unter Für die Sicherung einer PostgreSQL-Datenbank erforderliche Berechtigungen.

Um den Wiederherstellungspunkt als Dateien in einem Speicherkonto wiederherzustellen, benötigt die dem System zugewiesene verwaltete Identität des Backup-Datenspeichers Zugriff auf das Zielspeicherkonto.

Holen Sie den entsprechenden Wiederherstellungspunkt

Verwenden Sie den az dataprotection backup-instance list Befehl, um alle Sicherungsinstanzen in einem Tresor auflisten zu können. Rufen Sie dann die relevante Instanz mithilfe des az dataprotection backup-instance show Befehls ab.

Alternativ können Sie in großen Szenarien Sicherungsinstanzen über Tresore und Abonnements hinweg auflisten, indem Sie den az dataprotection backup-instance list-from-resourcegraph Befehl verwenden:

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

Nachdem Sie die Instanz identifiziert haben, rufen Sie den relevanten Wiederherstellungspunkt mithilfe des az dataprotection recovery-point list Befehls ab:

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

Wenn Sie den Wiederherstellungspunkt von der Archivebene abrufen müssen, ist die type-Variable in recoveryPointDataStoreDetailsArchiveStore.

Vorbereiten der Wiederherstellungsanforderung

Es gibt verschiedene Wiederherstellungsoptionen für eine PostgreSQL-Datenbank. Sie können den Wiederherstellungspunkt als andere Datenbank oder als Dateien wiederherstellen. Der Wiederherstellungspunkt kann sich auch auf der Archivebene befinden.

Wiederherstellen als Datenbank

Erstellen Sie die Azure Resource Manager-ID der neuen PostgreSQL-Datenbank mithilfe des Ziel-PostgreSQL-Servers, dem Sie Berechtigungen zugewiesen haben. Erstellen Sie außerdem den erforderlichen PostgreSQL-Datenbanknamen. Eine PostgreSQL-Datenbank kann beispielsweise als emprestored21 unter einem PostgreSQL-Zielserver namens targetossserver in der Ressourcengruppe targetrg mit einem anderen Abonnement benannt werden:

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

Verwenden Sie den az dataprotection backup-instance restore initialize-for-data-recovery Befehl, um die Wiederherstellungsanforderung mit allen relevanten Details vorzubereiten:

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

Für einen archivbasierten Wiederherstellungspunkt müssen Sie Folgendes tun:

  1. Aktivieren aus dem Archivdatenspeicher im Tresorspeicher
  2. Ändern des Quelldatenspeichers
  3. Weitere Parameter hinzufügen, um die Priorität der Rehydrierung anzugeben.
  4. Angeben der Dauer, für die der aktivierte Wiederherstellungspunkt im Tresordatenspeicher beibehalten werden soll
  5. Wiederherstellung als Datenbank von diesem Wiederherstellungspunkt aus.

Verwenden Sie den folgenden Befehl, um die Anforderung auf alle zuvor erwähnten Vorgänge gleichzeitig vorzubereiten:

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

Wiederherstellen als Dateien

Rufen Sie den URI des Containers innerhalb des Speicherkontos ab , dem Sie Berechtigungen zugewiesen haben. Im folgenden Beispiel wird ein Container testcontainerrestore in einem Speicherkonto testossstorageaccount mit einem anderen Abonnement verwendet:

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

Verwenden Sie den az dataprotection backup-instance restore initialize-for-data-recovery-as-files Befehl, um die Wiederherstellungsanforderung mit allen relevanten Details vorzubereiten:

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

Für den archivbasierten Wiederherstellungspunkt gehen Sie im folgenden Skript wie folgt vor:

  • Ändern des Quelldatenspeichers
  • Fügen Sie die Aktivierungspriorität und die Aufbewahrungsdauer (in Tagen) des aktivierten Wiederherstellungspunkts hinzu.
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

Verwenden Sie den az dataprotection backup-instance validate-for-restore Befehl, um zu überprüfen, ob die JSON-Datei erfolgreich beim Erstellen neuer Ressourcen ist.

Auslösen des Wiederherstellungsvorgangs

Verwenden Sie den az dataprotection backup-instance restore trigger Befehl, um den Wiederherstellungsvorgang mit der zuvor vorbereiteten Anforderung auszulösen:

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

Nachverfolgen von Aufträgen

Nachverfolgen von Aufträgen mithilfe des az dataprotection job list Befehls. Sie können alle Aufträge auflisten und ein bestimmtes Auftragsdetail abrufen.

Sie können auch Az.ResourceGraph verwenden, um Aufträge über alle Backup-Tresore hinweg nachzuverfolgen. Verwenden Sie den Befehl az dataprotection job list-from-resourcegraph, um den relevanten Auftrag über alle Backup-Tresore hinweg abzurufen:

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