Freigeben über


Azure PostgreSQL-Datenbanken mit Azure CLI wiederherstellen

Dieser Artikel erklärt, wie Azure PostgreSQL Datenbanken auf einem Azure PostgreSQL Server wiederhergestellt werden, der mit Azure Backup gesichert wurde.

Da es sich um eine PaaS-Datenbank handelt, wird die Option zur Wiederherstellung am ursprünglichen Speicherort (Original Location Recovery, OLR) nicht unterstützt. Bei dieser Option erfolgt die Wiederherstellung durch Ersetzen der bestehenden Datenbank (von der die Sicherungen erstellt wurden). Sie können aus einem Wiederherstellungspunkt wiederherstellen, um eine neue Datenbank auf demselben Azure PostgreSQL-Server oder auf einem anderen PostgreSQL-Server zu erstellen. Dies wird als „Alternate-Location Recovery“ bezeichnet (ALR, Wiederherstellung an einem anderen Speicherort). Auf diese Weise können Sie sowohl die Quelldatenbank als auch die wiederhergestellte (neue) Datenbank beibehalten.

Hier verwenden wir einen vorhandenen Sicherungstresor TestBkpVault unter der Ressourcengruppe testBkpVaultRG in den Beispielen.

Wiederherstellung einer gesicherten PostgreSQL-Datenbank

Einrichten von Berechtigungen

Der Sicherungstresor verwendet die verwaltete Identität für den Zugriff auf andere Azure-Ressourcen. Zur Wiederherstellung aus einer Sicherung benötigt die verwaltete Identität des Backup-Tresors verschiedene Berechtigungen auf dem Azure PostgreSQL-Server, auf dem die Datenbank wiederhergestellt werden soll.

Um die relevanten Berechtigungen für die vom System zugewiesene verwaltete Identität des Tresors auf dem PostgreSQL-Zielserver zuzuweisen, siehe Satz von Berechtigungen, die für die Sicherung der Azure PostgreSQL-Datenbank benötigt werden.

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

Wenn Sie alle Sicherungsinstanzen in einem Tresor auflisten möchten, verwenden Sie den Befehl az dataprotection backup-instance list. Anschließend rufen Sie die relevante Instanz mit dem Befehl az dataprotection backup-instance show ab. Alternativ können Sie für at-scale Szenarien mit dem Befehl az dataprotection backup-instance list-from-resourcegraph Sicherungsinstanzen über Tresore und Abonnements auflisten.

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

Nachdem die Instanz identifiziert wurde, rufen Sie den relevanten Wiederherstellungspunkt mit dem Befehl az dataprotection recovery-point list ab.

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

Wenn Sie den Wiederherstellungspunkt von der Archivebene abrufen müssen, lautet die Variable type 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 auch auf der Archivebene liegen.

Wiederherstellen als Datenbank

Erstellen Sie die Azure Resource Manager-ID (ARM-ID) der neuen PostgreSQL-Datenbank. Sie müssen diese mit dem PostgreSQL-Zielserver erstellen, dem Berechtigungen zugewiesen wurden. Erstellen Sie außerdem den erforderlichen PostgreSQL-Datenbanknamen. Zum Beispiel kann eine PostgreSQL-Datenbank emprestored21 unter einem PostgreSQL-Zielserver 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 Befehl az dataprotection backup-instance restore initialize-for-data-recovery, 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. Rehydrieren vom Archivdatenspeicher in den Tresorspeicher
  2. Ändern des Quelldatenspeichers
  3. Hinzufügen weiterer Parameter zur Angabe der Aktivierungspriorität
  4. Angeben der Dauer, für die der aktivierte Wiederherstellungspunkt im Tresordatenspeicher beibehalten werden soll
  5. Wiederherstellen als Datenbank von diesem Wiederherstellungspunkt aus

Verwenden Sie den folgenden Befehl, um die Anforderung für alle zuvor genannten Vorgänge auf einmal 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 (Uniform Resource Identifier) des Containers innerhalb des Speicherkontos ab, dem Berechtigungen zugewiesen wurden. Beispiel: Ein Container namens testcontainerrestore unter einem Speicherkonto testossstorageaccount mit einem anderen Abonnement.

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

Verwenden Sie den Befehl az dataprotection backup-instance restore initialize-for-data-recovery-as-files, um den Wiederherstellungsauftrag 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 einen 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

Mit dem Befehl az dataprotection backup-instance validate-for-restore können Sie überprüfen, ob die JSON-Datei zur Erstellung neuer Ressourcen geeignet ist.

Auslösen des Wiederherstellungsvorgangs

Verwenden Sie den Befehl az dataprotection backup-instance restore trigger, 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-957d23b1-c679-4c94-ade6-c4d34635e149 --restore-request-object OssRestoreReq.JSON

Aufträge nachverfolgen

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

Sie können auch Az.ResourceGraph verwenden, um Aufträge über alle Sicherungstresore hinweg zu verfolgen. Verwenden Sie den Befehl az dataprotection job list-from-resourcegraph, um den entsprechenden Auftrag zu erhalten, der sich über alle Backup-Depots erstreckt.

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

Nächste Schritte