Freigeben über


Wiederherstellen von PostgreSQL-Datenbanken mithilfe von Azure PowerShell

In diesem Artikel wird beschrieben, wie Sie Azure PowerShell 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 des Azure-Portals, der Azure CLI und der 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 Backup-Tresor namens TestBkpVault unter der Ressourcengruppe testBkpVaultRG:

$TestBkpVault = Get-AzDataProtectionBackupVault -VaultName TestBkpVault -ResourceGroupName "testBkpVaultRG"

Wiederherstellen zum Erstellen einer neuen 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 systemseitig zugewiesene verwaltete Identität des Sicherungstresors Zugriff auf das Zielspeicherkonto.

Holen Sie den entsprechenden Wiederherstellungspunkt

Rufen Sie alle Instanzen mithilfe des Get-AzDataProtectionBackupInstance Befehls ab, und identifizieren Sie die relevante Instanz:

$AllInstances = Get-AzDataProtectionBackupInstance -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name

Sie können auch Az.Resourcegraph und den Befehl Search-AzDataProtectionBackupInstanceInAzGraph verwenden, um Wiederherstellungspunkte in Instanzen in zahlreichen Tresoren und Abonnements zu suchen:

$AllInstances = Search-AzDataProtectionBackupInstanceInAzGraph -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -DatasourceType AzureDatabaseForPostgreSQL -ProtectionStatus ProtectionConfigured

Verwenden Sie die PowerShell-Clientsuchfunktionen, um die Suchkriterien zu filtern:

Search-AzDataProtectionBackupInstanceInAzGraph -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -DatasourceType AzureDatabaseForPostgreSQL -ProtectionStatus ProtectionConfigured | Where-Object { $_.BackupInstanceName -match "empdb11"}

Nachdem Sie die Instanz identifiziert haben, rufen Sie den relevanten Wiederherstellungspunkt ab:

$rp = Get-AzDataProtectionRecoveryPoint -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -BackupInstanceName $AllInstances[2].BackupInstanceName

Wenn Sie den Wiederherstellungspunkt von der Archivebene abrufen müssen, fügen Sie einen Clientfilter hinzu:

Get-AzDataProtectionRecoveryPoint -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -BackupInstanceName $AllInstances[2].BackupInstanceName | Where-Object {$_.Property.RecoveryPointDataStoresDetail[0].Type -match "Archive" }

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, die erstellt werden soll (mit dem Ziel-PostgreSQL-Server, dem Berechtigungen zugewiesen wurden, wie zuvor beschrieben). Schließen Sie den erforderlichen PostgreSQL-Datenbanknamen ein. 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 Initialize-AzDataProtectionRestoreRequest Befehl, um die Wiederherstellungsanforderung mit allen relevanten Details vorzubereiten:

$OssRestoreReq = Initialize-AzDataProtectionRestoreRequest -DatasourceType AzureDatabaseForPostgreSQL -SourceDataStore VaultStore -RestoreLocation $TestBkpVault.Location -RestoreType AlternateLocation -RecoveryPoint $rps[0].Property.RecoveryPointId -TargetResourceId $targetOssId -SecretStoreURI "https://restoreoss-test.vault.azure.net/secrets/dbauth3" -SecretStoreType AzureKeyVault

Für einen archivbasierten Wiederherstellungspunkt müssen Sie folgende Schritte ausführen:

  1. Aktivieren aus dem Archivdatenspeicher im Tresorspeicher
  2. Ändern des Quelldatenspeichers
  3. Hinzufügen weiterer Parameter, um die Aktivierungspriorität 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:

$OssRestoreFromArchiveReq = Initialize-AzDataProtectionRestoreRequest -DatasourceType AzureDatabaseForPostgreSQL -SourceDataStore ArchiveStore -RestoreLocation $TestBkpVault.Location -RestoreType AlternateLocation -RecoveryPoint $rps[0].Property.RecoveryPointId -TargetResourceId $targetOssId -SecretStoreURI "https://restoreoss-test.vault.azure.net/secrets/dbauth3" -SecretStoreType AzureKeyVault -RehydrationDuration 12 -RehydrationPriority Standard

Wiederherstellen als Dateien

Rufen Sie den URI des Containers innerhalb des Speicherkontos ab, dem Berechtigungen zugewiesen wurden, wie zuvor beschrieben. 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 Initialize-AzDataProtectionRestoreRequest Befehl, um die Wiederherstellungsanforderung mit allen relevanten Details vorzubereiten:

$OssRestoreAsFilesReq = Initialize-AzDataProtectionRestoreRequest -DatasourceType AzureDatabaseForPostgreSQL -SourceDataStore VaultStore -RestoreLocation $TestBkpVault.Location -RestoreType RestoreAsFiles -RecoveryPoint $rps[0].Property.RecoveryPointId -TargetContainerURI $contURI -FileNamePrefix "empdb11_postgresql-westus_1628853549768" 

Ändern Sie für den archivbasierten Wiederherstellungspunkt den Quelldatenspeicher. Fügen Sie die Rehydrationspriorität und die Aufbewahrungsdauer des rehydratierten Wiederherstellungspunkts in Tagen hinzu:

$OssRestoreAsFilesFromArchiveReq = Initialize-AzDataProtectionRestoreRequest -DatasourceType AzureDatabaseForPostgreSQL -SourceDataStore ArchiveStore -RestoreLocation $TestBkpVault.Location -RestoreType RestoreAsFiles -RecoveryPoint $rps[0].Property.RecoveryPointId -TargetContainerURI $contURI -FileNamePrefix "empdb11_postgresql-westus_1628853549768" -RehydrationDuration "14" -RehydrationPriority Standard

Auslösen des Wiederherstellungsvorgangs

Verwenden Sie den Start-AzDataProtectionBackupInstanceRestore Befehl, um die Wiederherstellung mit der Anforderung auszulösen, die Sie zuvor vorbereitet haben:

Start-AzDataProtectionBackupInstanceRestore -BackupInstanceName $AllInstances[2].BackupInstanceName -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -Parameter $OssRestoreReq

Nachverfolgen von Aufträgen

Nachverfolgen von Aufträgen mithilfe des Get-AzDataProtectionJob 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 Search-AzDataProtectionJobInAzGraph, um den relevanten Auftrag über alle Backup-Tresore hinweg abzurufen:

$job = Search-AzDataProtectionJobInAzGraph -Subscription $sub -ResourceGroupName "testBkpVaultRG" -Vault $TestBkpVault.Name -DatasourceType AzureDatabaseForPostgreSQL -Operation OnDemandBackup