Freigeben über


Wiederherstellen flexibler Azure Database for PostgreSQL-Server mithilfe der Azure CLI (Vorschau)

In diesem Artikel wird das Wiederherstellen einer Instanz von Azure Database for PostgreSQL – Flexible Server in einer Instanz von Azure Database for PostgreSQL – Flexibler Server erläutert, die in Azure Backup gesichert ist.

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 für das Speicherkonto, in dem der Server wiederhergestellt werden soll. Der verwalteten Identität sollte die Rolle Mitwirkender an Storage-Blobdaten für das Speicherkonto zugewiesen werden.

Holen Sie den entsprechenden Wiederherstellungspunkt

Wenn Sie alle Sicherungsinstanzen in einem Tresor auflisten möchten, verwenden Sie den Befehl az data protection backup-instance list. Anschließend rufen Sie die relevante Instanz mit dem Befehl az data protection backup-instance show ab. Für umfangreiche Szenarien können Sie Sicherungsinstanzen alternativ mit dem Befehl az data protection backup-instance list-from-resourcegraph tresor- und abonnementübergreifend auflisten.

az dataprotection backup-instance list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQLFlexibleServer -subscriptions 00001111-aaaa-2222-bbbb-3333cccc4444

  {
    "datasourceId": "/subscriptions/00001111-aaaa-2222-bbbb-3333cccc4444/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/testpgflex",
    "extendedLocation": null,
    "id": "/subscriptions/00001111-aaaa-2222-bbbb-3333cccc4444/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupInstances/testpostgresql-empdb11-957d23b1-c679-4c94-ade6-c4d34635e149",
    "identity": null,
    "kind": "",
    "location": "",
    "managedBy": "",
    "name": "testpgflex-957d23b1-c679-4c94-ade6-c4d34635e149",
    "plan": null,
    "properties": {
      "currentProtectionState": "ProtectionConfigured",
      "dataSourceInfo": {
        "baseUri": null,
        "datasourceType": "Microsoft.DBforPostgreSQL/flexibleServers",
        "objectType": "Datasource",
        "resourceID": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/testpgflex",
        "resourceLocation": "westus",
        "resourceName": "postgres",
        "resourceProperties": null,
        "resourceType": "Microsoft.DBforPostgreSQL/flexibleServers",
        "resourceUri": ""
      },
      "dataSourceProperties": null,
      "dataSourceSetInfo": {
        "baseUri": null,
        "datasourceType": "Microsoft.DBforPostgreSQL/flexibleServers",
        "objectType": "DatasourceSet",
        "resourceID": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/testpgflex",
        "resourceLocation": "westus",
        "resourceName": "testpgflex",
        "resourceProperties": null,
        "resourceType": "Microsoft.DBforPostgreSQL/flexibleServers",
        "resourceUri": ""
      },
      "friendlyName": "testpgflex",
      "objectType": "BackupInstance",
      "policyInfo": {
        "policyId": "/subscriptions/00001111-aaaa-2222-bbbb-3333cccc4444/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": bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f,
    "tags": null,
    "tenantId": aaaabbbb-0000-cccc-1111-dddd2222eeee,
    "type": "microsoft.dataprotection/backupvaults/backupinstances",
    "vaultName": "testBkpVault",
    "zones": null
  }
.
.
.
.
.

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

az dataprotection recovery-point list --backup-instance-name testpgflex-957d23b1-c679-4c94-ade6-c4d34635e149 -g testBkpVaultRG --vault-name TestBkpVault

{
  "id": "/subscriptions/00001111-aaaa-2222-bbbb-3333cccc4444/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupInstances/testpgflex-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"
}

Vorbereiten der Wiederherstellungsanforderung

Sie können den Wiederherstellungspunkt für eine Datenbank in PostgreSQL – Flexibler Server nur als Dateien wiederherstellen.

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 im Speicherkonto testossstorageaccount mit einem anderen Abonnement.

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

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

az dataprotection backup-instance restore initialize-for-data-recovery-as-files --datasource-type AzureDatabaseForPostgreSQLFlexibleServer  --restore-location {location} --source-datastore VaultStore -target-blob-container-url $contURI --recovery-point-id 9da55e757af94261afa009b43cd3222a > OssRestoreAsFilesReq.JSON

Mit dem Befehl az data protection 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 data protection 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 testpgflex-957d23b1-c679-4c94-ade6-c4d34635e149 --restore-request-object OssRestoreReq.JSON

Aufträge nachverfolgen

Verfolgen Sie alle Aufträge mithilfe des Befehls az data protection 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 data protection job list-from-resourcegraph, um den entsprechenden Auftrag abzurufen, der sich über alle Backup-Tresore erstreckt.

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

Erstellen eines flexiblen PostgreSQL-Servers aus einem wiederhergestellten Speicherkonto

Nach Abschluss der Wiederherstellung im Zielspeicherkonto können Sie das Hilfsprogramm pg_restore verwenden, um eine Datenbank von Azure Database for PostgreSQL – Flexibler Server aus dem Ziel wiederherzustellen. Verwenden Sie den folgenden Befehl, um eine Verbindung mit einer vorhandenen Instanz von PostgreSQL – Flexibler Server und einer vorhandenen Datenbank herzustellen.

pg_restore -h <hostname> -U <username> -d <db name> -Fd -j <NUM> -C <dump directory>

-Fd: Das Verzeichnisformat. -j: Die Anzahl der Aufträge. -C: Starten der Ausgabe mit einem Befehl zum Erstellen der Datenbank selbst und dann zum erneuten Herstellen einer Verbindung mit ihr.

Beispiel für die Syntax:

pg_restore -h <hostname> -U <username> -j <Num of parallel jobs> -Fd -C -d <databasename> sampledb_dir_format

Wenn Sie mehrere Datenbanken wiederherstellen müssen, führen Sie den vorherigen Befehl für jede Datenbank erneut aus.

Wenn Sie gleichzeitig mehrere Aufträge mit -j ausführen, können Sie auch die Zeit für das Wiederherstellen einer großen Datenbank auf einem Zielserver mit mehreren virtuellen Kernen (vCore) verkürzen. Die Anzahl der Aufträge darf maximal der Anzahl der dem Zielserver zugewiesenen vCPUs entsprechen.

Nächste Schritte