Udostępnij za pomocą


Przywracanie baz danych PostgreSQL przy użyciu programu Azure PowerShell

W tym artykule opisano sposób używania programu Azure PowerShell do przywracania baz danych PostgreSQL na serwer usługi Azure Database for PostgreSQL , którego kopia zapasowa została utworzona za pomocą usługi Azure Backup. Bazę danych PostgreSQL można również przywrócić przy użyciu witryny Azure Portal, interfejsu wiersza polecenia platformy Azure i interfejsu API REST.

Ponieważ baza danych PostgreSQL jest bazą danych jako usługa (PaaS), opcja odzyskiwania Original-Location (OLR), zastępując istniejącą bazę danych (z której zostały wykonane kopie zapasowe), nie jest obsługiwana. Możesz przywrócić z punktu odzyskiwania, aby utworzyć nową bazę danych na tym samym serwerze usługi Azure Database for PostgreSQL lub na dowolnym innym serwerze PostgreSQL. Ta opcja jest nazywana Alternate-Location Recovery (ALR). Funkcja ALR pomaga zachować zarówno źródłową bazę danych, jak i przywróconą (nową) bazę danych.

Przykłady w tym artykule dotyczą istniejącego magazynu kopii zapasowych o nazwie TestBkpVault w grupie testBkpVaultRGzasobów :

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

Przywróć, aby utworzyć nową bazę danych PostgreSQL

Konfigurowanie uprawnień

Backup vault używa tożsamości zarządzanej do uzyskiwania dostępu do innych zasobów platformy Azure. Aby przywrócić kopię zapasową, tożsamość zarządzana magazynu kopii zapasowych wymaga zestawu uprawnień na serwerze usługi Azure Database for PostgreSQL, do którego ma zostać przywrócona baza danych.

Aby przypisać odpowiednie uprawnienia dla przypisanej przez system tożsamości zarządzanej magazynu na docelowym serwerze PostgreSQL, zobacz zestaw uprawnień wymaganych do utworzenia kopii zapasowej bazy danych PostgreSQL.

Aby przywrócić punkt odzyskiwania jako pliki do konta magazynu, systemowo przypisana tożsamość zarządzana skarbca kopii zapasowych wymaga dostępu do docelowego konta magazynu.

Pobierz odpowiedni punkt odzyskiwania

Pobierz wszystkie wystąpienia przy użyciu Get-AzDataProtectionBackupInstance polecenia i zidentyfikuj odpowiednie wystąpienie:

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

Można również użyć Az.Resourcegraph i polecenia Search-AzDataProtectionBackupInstanceInAzGraph, aby wyszukać punkty odzyskiwania wśród wystąpień w wielu magazynach i subskrypcjach.

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

Aby filtrować kryteria wyszukiwania, użyj funkcji wyszukiwania klienta programu PowerShell:

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

Po zidentyfikowaniu wystąpienia pobierz odpowiedni punkt odzyskiwania:

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

Jeśli musisz pobrać punkt odzyskiwania z poziomu archiwum, dodaj filtr klienta:

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

Przygotowywanie żądania przywracania

Istnieją różne opcje przywracania bazy danych PostgreSQL. Punkt odzyskiwania można przywrócić jako inną bazę danych lub przywrócić jako pliki. Punkt odzyskiwania może również znajdować się w warstwie archiwum.

Przywróć jako bazę danych

Skonstruuj identyfikator usługi Azure Resource Manager nowej bazy danych PostgreSQL do utworzenia (z docelowym serwerem PostgreSQL, do którego przypisano uprawnienia, zgodnie z wcześniejszym opisem). Uwzględnij wymaganą nazwę bazy danych PostgreSQL. Na przykład baza danych PostgreSQL może mieć nazwę emprestored21 w ramach docelowego serwera PostgreSQL o nazwie targetossserver w grupie targetrg zasobów z inną subskrypcją:

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

Użyj polecenia , Initialize-AzDataProtectionRestoreRequest aby przygotować żądanie przywracania ze wszystkimi odpowiednimi szczegółami:

$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

W przypadku punktu odzyskiwania opartego na archiwum należy wykonać następujące kroki:

  1. Przywracanie danych z magazynu archiwum do magazynu danych typu skarbiec.
  2. Zmodyfikuj źródłowy magazyn danych.
  3. Dodaj inne parametry, aby określić priorytet rehydratacji.
  4. Określ czas, przez jaki zrehydratowany punkt odzyskiwania ma być przechowywany w magazynie danych.
  5. Przywróć jako bazę danych z tego punktu odzyskiwania.

Użyj następującego polecenia, aby przygotować żądanie dla wszystkich wcześniej wymienionych operacji jednocześnie:

$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

Przywróć jako pliki

Pobierz identyfikator URI kontenera na koncie magazynowym, do którego przypisano uprawnienia, zgodnie z wcześniejszym przypisem. W poniższym przykładzie użyto kontenera o nazwie testcontainerrestore w ramach konta magazynu o nazwie testossstorageaccount, z inną subskrypcją:

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

Użyj polecenia , Initialize-AzDataProtectionRestoreRequest aby przygotować żądanie przywracania ze wszystkimi odpowiednimi szczegółami:

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

W przypadku punktu odzyskiwania opartego na archiwum zmodyfikuj źródłowy magazyn danych. Dodaj priorytet ponownego wypełniania i czas trwania przechowywania w dniach punktu odzyskiwania z ponownym wypełnianiem:

$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

Rozpocznij przywracanie

Użyj polecenia Start-AzDataProtectionBackupInstanceRestore, aby uruchomić przywracanie za pomocą żądania przygotowanego wcześniej:

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

Śledź zadania

Śledź zadania przy użyciu polecenia Get-AzDataProtectionJob. Możesz wyświetlić listę wszystkich zadań i pobrać szczegóły określonego zadania.

Możesz również użyć Az.ResourceGraph do śledzenia zadań we wszystkich magazynach usługi Backup. Użyj polecenia Search-AzDataProtectionJobInAzGraph aby uzyskać odpowiednie zadanie, które znajduje się we wszystkich magazynach kopii zapasowych.

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