이 문서에서는 Azure PowerShell을 사용하여 Azure Backup을 통해 백업한 Azure Database for PostgreSQL 서버로 PostgreSQL 데이터베이스를 복원하는 방법을 설명합니다. Azure Portal, Azure CLI 및 REST API를 사용하여 PostgreSQL 데이터베이스를 복원할 수도 있습니다.
PostgreSQL 데이터베이스는 PaaS(Platform as a Service) 데이터베이스이므로 백업이 수행된 기존 데이터베이스를 대체하여 복원하는 OLR(Original-Location Recovery) 옵션은 지원되지 않습니다. 복구 지점에서 복원하여 동일한 Azure Database for PostgreSQL 서버 또는 다른 PostgreSQL 서버에서 새 데이터베이스를 만들 수 있습니다. 이 옵션을 Alternate-Location 복구(ALR)라고 합니다. ALR은 원본 데이터베이스와 복원된(새) 데이터베이스를 모두 유지하는 데 도움이 됩니다.
이 문서의 예제는 리소스 그룹 TestBkpVault
에 속한 testBkpVaultRG
라는 기존 백업 보관소를 참조합니다.
$TestBkpVault = Get-AzDataProtectionBackupVault -VaultName TestBkpVault -ResourceGroupName "testBkpVaultRG"
복원하여 새 PostgreSQL 데이터베이스 만들기
권한 설정
백업 볼트는 관리되는 ID를 사용하여 다른 Azure 리소스에 액세스합니다. 백업에서 복원하려면, Backup 자격 증명 모음의 관리 ID는 데이터베이스를 복원을 수행할 Azure Database for PostgreSQL 서버에 대한 권한 집합이 필요합니다.
대상 PostgreSQL 서버에서 자격 증명 모음의 시스템 할당 관리 ID에 대한 관련 권한을 할당하려면 PostgreSQL 데이터베이스를 백업하는 데 필요한 권한 집합을 참조하세요.
복구 지점을 스토리지 계정에 파일로 복원하려면 백업 자격 증명 모음의 시스템 할당 관리 ID에 대상 스토리지 계정에 대한 액세스 권한이 필요합니다.
관련 복구 지점 가져오기
명령을 사용하여 모든 인스턴스를 Get-AzDataProtectionBackupInstance
가져오고 관련 인스턴스를 식별합니다.
$AllInstances = Get-AzDataProtectionBackupInstance -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name
Az.Resourcegraph
및 Search-AzDataProtectionBackupInstanceInAzGraph
명령을 사용하여 여러 자격 증명 모음과 구독의 인스턴스에서 복구 지점을 검색할 수 있습니다.
$AllInstances = Search-AzDataProtectionBackupInstanceInAzGraph -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -DatasourceType AzureDatabaseForPostgreSQL -ProtectionStatus ProtectionConfigured
검색 조건을 필터링하려면 PowerShell 클라이언트 검색 기능을 사용합니다.
Search-AzDataProtectionBackupInstanceInAzGraph -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -DatasourceType AzureDatabaseForPostgreSQL -ProtectionStatus ProtectionConfigured | Where-Object { $_.BackupInstanceName -match "empdb11"}
인스턴스를 식별한 후 관련 복구 지점을 가져옵니다.
$rp = Get-AzDataProtectionRecoveryPoint -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -BackupInstanceName $AllInstances[2].BackupInstanceName
보관 계층에서 복구 지점을 가져와야 하는 경우 클라이언트 필터를 추가합니다.
Get-AzDataProtectionRecoveryPoint -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -BackupInstanceName $AllInstances[2].BackupInstanceName | Where-Object {$_.Property.RecoveryPointDataStoresDetail[0].Type -match "Archive" }
복원 요청 준비
PostgreSQL 데이터베이스에는 다양한 복원 옵션이 있습니다. 복구 지점을 다른 데이터베이스로 복원하거나 파일로 복원할 수 있습니다. 복구 지점은 보관 계층에 있을 수도 있습니다.
데이터베이스로 복원
만들 새 PostgreSQL 데이터베이스의 Azure Resource Manager ID를 생성합니다( 앞에서 설명한 대로 사용 권한이 할당된 대상 PostgreSQL 서버 사용). 필요한 PostgreSQL 데이터베이스 이름을 포함합니다. 예를 들어, PostgreSQL 데이터베이스는 다른 구독을 가진 리소스 그룹에서 emprestored21
에 있는 대상 PostgreSQL 서버 targetossserver
아래에 targetrg
로 이름을 지정할 수 있습니다.
$targetOssId = /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourceGroups/targetrg/providers/providers/Microsoft.DBforPostgreSQL/servers/targetossserver/databases/emprestored21
이 Initialize-AzDataProtectionRestoreRequest
명령을 사용하여 모든 관련 세부 정보를 사용하여 복원 요청을 준비합니다.
$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
보관 기반 복구 지점의 경우 다음을 수행해야 합니다.
- 보관 데이터 저장소에서 복구 데이터 저장소로 복구합니다.
- 원본 데이터 저장소를 수정합니다.
- 리하이드레이션 우선 순위를 지정하려면 다른 매개 변수를 추가합니다.
- 리하이딩된 복구 지점을 자격 증명 모음 데이터 저장소에 보존해야 하는 기간을 지정합니다.
- 이 복구 지점에서 데이터베이스로 복원합니다.
다음 명령을 사용하여 이전에 언급한 모든 작업에 대한 요청을 한 번에 준비합니다.
$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
파일로 복원
앞에서 설명한 대로 사용 권한이 할당된 스토리지 계정 내에서 컨테이너의 URI를 가져옵니다. 다음 예제에서는 다른 구독으로 명명된 스토리지 계정 아래에 명명된 testcontainerrestore
testossstorageaccount
컨테이너를 사용합니다.
$contURI = "https://testossstorageaccount.blob.core.windows.net/testcontainerrestore"
이 Initialize-AzDataProtectionRestoreRequest
명령을 사용하여 모든 관련 세부 정보를 사용하여 복원 요청을 준비합니다.
$OssRestoreAsFilesReq = Initialize-AzDataProtectionRestoreRequest -DatasourceType AzureDatabaseForPostgreSQL -SourceDataStore VaultStore -RestoreLocation $TestBkpVault.Location -RestoreType RestoreAsFiles -RecoveryPoint $rps[0].Property.RecoveryPointId -TargetContainerURI $contURI -FileNamePrefix "empdb11_postgresql-westus_1628853549768"
보관 기반 복구 지점의 경우 원본 데이터 저장소를 수정합니다. 리하이드된 복구 지점의 리하이드레이션 우선 순위 및 보존 기간(일)을 추가합니다.
$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
복원 트리거
이 Start-AzDataProtectionBackupInstanceRestore
명령을 사용하여 이전에 준비한 요청으로 복원을 트리거합니다.
Start-AzDataProtectionBackupInstanceRestore -BackupInstanceName $AllInstances[2].BackupInstanceName -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -Parameter $OssRestoreReq
작업 추적
명령을 사용하여 작업을 추적합니다 Get-AzDataProtectionJob
. 모든 작업을 나열하고 특정 작업 세부 정보를 가져올 수 있습니다.
모든 백업 보관소에서 작업을 추적하는 데 Az.ResourceGraph
를 사용할 수 있습니다.
Search-AzDataProtectionJobInAzGraph
명령을 사용하여 모든 Backup 금고에 있는 관련 작업을 가져옵니다.
$job = Search-AzDataProtectionJobInAzGraph -Subscription $sub -ResourceGroupName "testBkpVaultRG" -Vault $TestBkpVault.Name -DatasourceType AzureDatabaseForPostgreSQL -Operation OnDemandBackup