Dela via


Återställa PostgreSQL-databaser med hjälp av Azure PowerShell

Den här artikeln beskriver hur du använder Azure PowerShell för att återställa PostgreSQL-databaser till en Azure Database for PostgreSQL-server som du säkerhetskopierade via Azure Backup. Du kan också återställa en PostgreSQL-databas med hjälp av Azure-portalen, Azure CLI och REST API.

Eftersom en PostgreSQL-databas är en PaaS-databas (plattform som en tjänst) stöds inte alternativet Original-Location Recovery (OLR) för återställning genom att ersätta den befintliga databasen (varifrån säkerhetskopiorna togs). Du kan återställa från en återställningspunkt för att skapa en ny databas i samma Azure Database for PostgreSQL-server eller på någon annan PostgreSQL-server. Det här alternativet kallas Alternate-Location Recovery (ALR). ALR hjälper till att behålla både källdatabasen och den återställda (nya) databasen.

Exemplen i den här artikeln refererar till ett befintligt Backup-valv med namnet TestBkpVault under resursgruppen testBkpVaultRG:

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

Återställ för att skapa en ny PostgreSQL-databas

Konfigurera behörigheter

Ett Säkerhetskopieringsvalv använder en hanterad identitet för att komma åt andra Azure-resurser. För att återställa från en säkerhetskopia kräver säkerhetskopieringsvalvets hanterade identitet en uppsättning behörigheter på Azure Database for PostgreSQL-servern som databasen ska återställas till.

Information om hur du tilldelar relevanta behörigheter för ett valvs systemtilldelade hanterade identitet på PostgreSQL-målservern finns i den uppsättning behörigheter som krävs för att säkerhetskopiera en PostgreSQL-databas.

För att återställa återställningspunkten som filer på ett lagringskonto behöver den systemtilldelade hanterade identiteten för säkerhetskopieringsvalvet ha åtkomst till mållagringskontot.

Hämta den relevanta återställningspunkten

Hämta alla instanser med hjälp Get-AzDataProtectionBackupInstance av kommandot och identifiera relevant instans:

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

Du kan också använda Az.Resourcegraph och Search-AzDataProtectionBackupInstanceInAzGraph kommandona för att söka efter återställningspunkter över instanser i många valv och prenumerationer.

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

Om du vill filtrera sökvillkoren använder du PowerShell-klientsökningsfunktionerna:

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

När du har identifierat instansen hämtar du relevant återställningspunkt:

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

Om du behöver hämta återställningspunkten från arkivnivån lägger du till ett klientfilter:

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

Förbereda återställningsbegäran

Det finns olika återställningsalternativ för en PostgreSQL-databas. Du kan återställa återställningspunkten som en annan databas eller återställa som filer. Återställningspunkten kan också finnas på arkivnivån.

Återställa som en databas

Skapa Azure Resource Manager-ID:t för den nya PostgreSQL-databasen som ska skapas (med postgreSQL-målservern som behörigheterna tilldelades till, enligt beskrivningen tidigare). Inkludera det nödvändiga PostgreSQL-databasnamnet. En PostgreSQL-databas kan till exempel namnges emprestored21 under en PostgreSQL-målserver med namnet targetossserver i resursgruppen targetrg med en annan prenumeration:

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

Initialize-AzDataProtectionRestoreRequest Använd kommandot för att förbereda återställningsbegäran med all relevant information:

$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 en arkivbaserad återställningspunkt måste du:

  1. Extrahera från arkivdatalagringen till valvets datalager.
  2. Ändra källdatalagringen.
  3. Lägg till andra parametrar för att ange rehydreringsprioriteten.
  4. Ange varaktigheten för vilken den rehydrerade återställningspunkten ska behållas i valvets datalagringsutrymme.
  5. Återställ som en databas från den här återställningspunkten.

Använd följande kommando för att förbereda begäran för alla tidigare nämnda åtgärder samtidigt:

$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

Återställa som filer

Hämta URI:n för containern i lagringskontot som behörigheterna tilldelades, enligt beskrivningen tidigare. I följande exempel används en container med namnet testcontainerrestore under ett lagringskonto med namnet testossstorageaccount med en annan prenumeration:

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

Initialize-AzDataProtectionRestoreRequest Använd kommandot för att förbereda återställningsbegäran med all relevant information:

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

Ändra källdatalagringen för den arkivbaserade återställningspunkten. Lägg till rehydreringsprioriteten och kvarhållningstiden i dagar för den rehydrerade återställningspunkten:

$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

Utlös återställningen

Start-AzDataProtectionBackupInstanceRestore Använd kommandot för att utlösa återställningen med den begäran som du förberedde tidigare:

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

Spåra arbeten

Spåra jobb genom att använda Get-AzDataProtectionJob-kommandot. Du kan visa en lista över alla jobb och hämta en viss jobbinformation.

Du kan också använda Az.ResourceGraph för att spåra jobb i alla backupvalv. Search-AzDataProtectionJobInAzGraph Använd kommandot för att hämta det relevanta jobbet som finns i alla Säkerhetskopieringsvalv:

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