Delen via


PostgreSQL-databases herstellen met behulp van Azure PowerShell

In dit artikel wordt beschreven hoe u Azure PowerShell gebruikt om PostgreSQL-databases te herstellen naar een Azure Database for PostgreSQL-server waarvan u een back-up hebt gemaakt via Azure Backup. U kunt ook een PostgreSQL-database herstellen met behulp van Azure Portal, Azure CLI en REST API.

Omdat een PostgreSQL-database een PaaS-database (Platform as a Service) is, wordt de optie Original-Location Recovery (OLR) om te herstellen niet ondersteund door de bestaande database (van waaruit de back-ups zijn gemaakt) te vervangen. U kunt herstellen vanaf een herstelpunt om een nieuwe database te maken op dezelfde Azure Database for PostgreSQL-server of op een andere PostgreSQL-server. Deze optie wordt Alternate-Location Recovery (ALR) genoemd. ALR helpt bij het behouden van zowel de brondatabase als de herstelde (nieuwe) database.

De voorbeelden in dit artikel verwijzen naar een bestaande Backup-kluis met de naam TestBkpVault onder de resourcegroep testBkpVaultRG:

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

Herstel om een nieuwe PostgreSQL-database te maken

Machtigingen instellen

Een Backup-kluis maakt gebruik van een beheerde identiteit voor toegang tot andere Azure-resources. Als u wilt herstellen vanuit een back-up, vereist de beheerde identiteit van de Backup-kluis een set machtigingen op de Azure Database for PostgreSQL-server waarnaar de database moet worden hersteld.

Als u de relevante machtigingen wilt toewijzen voor de door het systeem toegewezen beheerde identiteit van een kluis op de PostgreSQL-doelserver, raadpleegt u de set machtigingen die nodig zijn om een back-up te maken van een PostgreSQL-database.

Als u het herstelpunt als bestanden wilt herstellen naar een opslagaccount, moet de door het systeem toegewezen beheerde identiteit van de Backup-kluis toegang hebben tot het doelopslagaccount.

Het relevante herstelpunt ophalen

Haal alle exemplaren op met behulp van de Get-AzDataProtectionBackupInstance opdracht en identificeer het relevante exemplaar:

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

U kunt ook de Az.Resourcegraph en de Search-AzDataProtectionBackupInstanceInAzGraph opdracht gebruiken om herstelpunten in verschillende exemplaren in veel kluizen en abonnementen te doorzoeken.

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

Als u de zoekcriteria wilt filteren, gebruikt u de zoekmogelijkheden van de PowerShell-client:

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

Nadat u het exemplaar hebt geïdentificeerd, haalt u het relevante herstelpunt op:

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

Als u het herstelpunt uit de archieflaag wilt ophalen, voegt u een clientfilter toe:

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

De herstelaanvraag voorbereiden

Er zijn verschillende herstelopties voor een PostgreSQL-database. U kunt het herstelpunt herstellen als een andere database of als bestanden herstellen. Het herstelpunt kan zich ook op de archieflaag bevinden.

Herstellen als een database

Maak de Azure Resource Manager-id van de nieuwe PostgreSQL-database die moet worden gemaakt (met de PostgreSQL-doelserver waaraan machtigingen zijn toegewezen, zoals eerder beschreven). Neem de vereiste PostgreSQL-databasenaam op. Een PostgreSQL-database kan bijvoorbeeld worden benoemd emprestored21 onder een postgreSQL-doelserver met de naam targetossserver in de resourcegroep targetrg met een ander abonnement:

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

Gebruik de Initialize-AzDataProtectionRestoreRequest opdracht om de herstelaanvraag voor te bereiden met alle relevante details:

$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

Voor een herstelpunt op basis van een archief moet u het volgende doen:

  1. Rehydrateer uit het archiefgegevensarchief naar het gegevensarchief van de kluis.
  2. Wijzig de bron-datastore.
  3. Voeg andere parameters toe om de prioriteit van rehydratie te specificeren.
  4. Geef de duur op waarvoor het gerehydrateerde herstelpunt moet worden bewaard in de datakluis.
  5. Herstel de database vanaf dit herstelpunt.

Gebruik de volgende opdracht om de aanvraag voor te bereiden op alle eerder genoemde bewerkingen tegelijk:

$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

Herstellen als bestanden

Haal de URI van de container in het opslagaccount op waaraan machtigingen zijn toegewezen, zoals eerder beschreven. In het volgende voorbeeld wordt een container gebruikt met de naam testcontainerrestore onder een opslagaccount testossstorageaccount met een ander abonnement:

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

Gebruik de Initialize-AzDataProtectionRestoreRequest opdracht om de herstelaanvraag voor te bereiden met alle relevante details:

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

Wijzig het brongegevensarchief voor het archiefherstelpunt. Voeg de rehydratatieprioriteit en de bewaarduur, in dagen, van het gerehydrateerde herstelpunt toe:

$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

De herstelbewerking activeren

Gebruik de Start-AzDataProtectionBackupInstanceRestore opdracht om de herstelbewerking te activeren met de aanvraag die u eerder hebt voorbereid:

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

Banen bijhouden

Taken bijhouden met behulp van de Get-AzDataProtectionJob opdracht. U kunt alle vacatures opsommen en details van een specifieke vacature ophalen.

U kunt ook Az.ResourceGraph taken bijhouden in alle Backup-kluizen. Gebruik de Search-AzDataProtectionJobInAzGraph opdracht om de relevante taak op te halen die zich in alle Backup-kluizen bevinden:

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