Freigeben über


Wiederherstellen der Azure-Datenbank für PostgreSQL – Flexible Server mit Azure CLI

In diesem Artikel wird beschrieben, wie Azure-Datenbank für PostgreSQL wiederhergestellt wird – flexibler Server mit Azure CLI.

Hinweis

Die OlR-Option (Original Location Recovery) wird für PaaS-Datenbanken nicht unterstützt. Verwenden Sie stattdessen die Alternate-Location Recovery (ALR), um aus einem Wiederherstellungspunkt wiederherzustellen und eine neue Datenbank in derselben oder einer anderen Azure PostgreSQL zu erstellen – flexibler Server, wobei sowohl die Quell- als auch die wiederhergestellte Datenbank beibehalten werden.

Verwenden wir einen vorhandenen Sicherungstresor TestBkpVaultunter der Ressourcengruppe testBkpVaultRG in den Beispielen.

Voraussetzungen

Bevor Sie aus Sicherungen von Azure Database for PostgreSQL - Flexible Server wiederherstellen, sollten Sie die folgenden Voraussetzungen prüfen:

Hinweis

Sicherungsdaten werden als Blob im Sicherungstresor innerhalb des Microsoft-Mandanten gespeichert. Während eines Wiederherstellungsvorgangs werden die Sicherungsdaten mandantenübergreifend von einem Speicherkonto in ein anderes kopiert.

Einrichten von Berechtigungen für PostgreSQL – Flexible Server-Wiederherstellung

Der Sicherungstresor verwendet die verwaltete Identität für den Zugriff auf andere Azure-Ressourcen. Für die Wiederherstellung aus einer Sicherung benötigt die verwaltete Identität des Vault ein Set von Berechtigungen auf dem Azure PostgreSQL - Flexible Server, auf dem die Datenbank wiederhergestellt werden soll.

Um die entsprechenden Berechtigungen für die dem Vault vom System zugewiesene verwaltete Identität auf dem PostgreSQL - Flexible Ziel-Server zuzuweisen, überprüfen Sie die Berechtigungen, die für die Sicherung der Azure PostgreSQL - Flexible Server-Datenbank benötigt werden.

Um den Wiederherstellungspunkt als Dateien auf einem Storage-Konto wiederherzustellen, benötigt die vom System zugewiesene verwaltete Identität des Backup-Vaults Zugriff auf das Ziel-Storage-Konto.

Abrufen des relevanten Wiederherstellungspunkts für PostgreSQL – Flexibler Server

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 für Szenarien im großen Maßstab mit dem az dataprotection backup-instance list-from-resourcegraph-Befehl Sicherungs-Instanzen über Vaults und Abonnements hinweg auflisten.

az dataprotection backup-instance list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQLFlexibleServer -subscriptions "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"

{
    "datasourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/testpostgresql/databases/empdb11",
    "extendedLocation": null,
    "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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/flexibleServers/databases",
        "objectType": "Datasource",
        "resourceID": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/testpostgresql/databases/empdb11",
        "resourceLocation": "westus",
        "resourceName": "postgres",
        "resourceProperties": null,
        "resourceType": "Microsoft.DBforPostgreSQL/flexibleServers/databases",
        "resourceUri": ""
      },
      "dataSourceProperties": null,
      "dataSourceSetInfo": {
        "baseUri": null,
        "datasourceType": "Microsoft.DBforPostgreSQL/flexibleServers/databases",
        "objectType": "DatasourceSet",
        "resourceID": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/testpostgresql",
        "resourceLocation": "westus",
        "resourceName": "testpostgresql",
        "resourceProperties": null,
        "resourceType": "Microsoft.DBforPostgreSQL/flexibleServers",
        "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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
    "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 mithilfe des az dataprotection recovery-point list Befehls ab.

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

{
  "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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"
}

Vorbereiten der PostgreSQL – Flexible Server-Wiederherstellungsanforderung

Sie können den Wiederherstellungspunkt für eine PostgreSQL - Flexible Server-Datenbank nur als Dateien wiederherstellen.

Wiederherstellen als Dateien

Rufen Sie den URI (Uniform Resource Identifier) des Containers innerhalb des Speicherkontos ab, dem Berechtigungen zugewiesen wurden. Beispielsweise ein Container mit Namen testcontainerrestore unter einem Speicherkonto testossstorageaccount mit einem anderen Abonnement.

$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 AzureDatabaseForPostgreSQLFlexibleServer  --restore-location {location} --source-datastore VaultStore -target-blob-container-url $contURI --target-file-name "empdb11_postgresql-westus_1628853549768" --recovery-point-id 9da55e757af94261afa009b43cd3222a > OssRestoreAsFilesReq.JSON

Hinweis

Nachdem die Wiederherstellung des Zielspeicherkontos abgeschlossen ist, können Sie das pg_restore Dienstprogramm verwenden, um eine Azure-Datenbank für PostgreSQL – flexible Serverdatenbank aus dem Ziel wiederherzustellen.

Verwenden Sie den folgenden Befehl, um eine Verbindung mit einem vorhandenen PostgreSQL – Flexible Server und einer vorhandenen Datenbank herzustellen:

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

In diesem Skript:

  • Fd: Das Verzeichnisformat.
  • -j: Die Anzahl der Aufträge.
  • -C: Startet die Ausgabe mit einem Befehl, um die Datenbank selbst zu erstellen und dann erneut eine Verbindung damit herzustellen.

Das folgende Beispiel zeigt, wie die Syntax aussehen kann:

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

Wenn Sie mehr als eine Datenbank wiederherstellen müssen, führen Sie den früheren Befehl für jede Datenbank erneut aus. Außerdem können Sie mithilfe mehrerer gleichzeitiger Aufträge -jdie Wiederherstellungszeit für eine große Datenbank auf einem Multi-vCore-Zielserver reduzieren. Die Anzahl der Aufträge kann gleich oder kleiner als die Anzahl der zugewiesenen vCPUs Aufträge für den Zielserver sein.

Auslösen der Wiederherstellung für PostgreSQL – Flexibler Server

Verwenden Sie az dataprotection backup-instance restore trigger den Befehl, um den Wiederherstellungsvorgang mit der 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

Nachverfolgen von Aufträgen für PostgreSQL – Flexible Serverwiederherstellung

Verfolgen Sie alle Aufträge 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 az dataprotection job list-from-resourcegraph-Befehl, um den entsprechenden Job abzurufen, der sich über alle Vaults der Sicherung erstreckt.

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

Nächster Schritt

Behebung häufiger Fehler bei Sicherungs- und Wiederherstellungsvorgängen für die Azure Database for PostgreSQL – Flexible Server.