使用 Azure PowerShell 还原 Azure Database for PostgreSQL 的灵活服务器

本文介绍如何使用 Azure PowerShell 还原 Azure Database for PostgreSQL 灵活服务器。

注释

PaaS 数据库不支持原始位置恢复(OLR)选项。 请改用 Alternate-Location 恢复(ALR)从恢复点还原,并在相同或另一个 Azure PostgreSQL 灵活服务器中创建新数据库,同时保留源数据库和还原的数据库。

让我们在示例中的资源组TestBkpVault下使用现有的备份保管库testBkpVaultRG

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

设置还原权限

备份保管库使用托管标识来访问其他 Azure 资源。 从备份中还原时,备份保管库的托管身份需要在目标 Azure PostgreSQL 灵活服务器上获得一组权限,以便能够还原数据库。

若要在目标 PostgreSQL 灵活服务器上分配为保管库系统分配的托管标识相关的权限,请检查备份 Azure PostgreSQL 灵活服务器数据库所需的 权限集

若要将恢复点作为文件还原到存储帐户,备份保管库的系统分配的托管标识符需要对目标存储帐户有访问权限。

提取相关恢复点

使用 Get-AzDataProtectionBackupInstance cmdlet 提取所有实例,并标识相关实例。

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

还可以使用 Az.ResourcegraphSearch-AzDataProtectionBackupInstanceInAzGraph cmdlet 跨多个保管库和订阅中的实例搜索恢复点。

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

若要筛选搜索条件,请使用以下 PowerShell 客户端搜索功能:

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

标识实例后,提取相关恢复点。

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

准备还原请求

只能将 PostgreSQL - Flexible Server 数据库的恢复点还原为文件。

还原为文件

提取容器的统一资源标识符(URI),该标识符位于向其分配权限的存储帐户中。 例如,具有不同订阅的存储帐户 testcontainerrestore 下名为 testossstorageaccount 的容器。

$contURI = "https://testossstorageaccount.blob.core.chinacloudapi.cn/testcontainerrestore"

使用 Initialize-AzDataProtectionRestoreRequest cmdlet 准备包含所有相关详细信息的还原请求。

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

注释

还原到目标存储帐户完成后,可以使用 pg_restore 工具从目标还原 Azure Database for PostgreSQL 灵活服务器(Flexible Server)数据库。

若要连接到现有的 PostgreSQL 灵活服务器和现有数据库,请使用以下 cmdlet:

pg_restore -h <hostname> -U <username> -d <db name> -Fd -j <NUM> -C <dump directory>

在此脚本中:

  • -Fd:目录格式。
  • -j:作业数。
  • -C:使用 cmdlet 启动输出以创建数据库本身,然后重新连接到该数据库。

以下示例演示如何显示语法:

pg_restore -h <hostname> -U <username> -j <Num of parallel jobs> -Fd -C -d <databasename> sampledb_dir_format

如果有多个数据库要还原,请为每个数据库重新运行较早的 cmdlet。 此外,通过使用多个并发作业-j,你可以减少在多虚拟核心目标服务器上大型数据库的恢复时间。 作业数可以等于或小于为目标服务器分配的 vCPUs 作业数。

触发还原

若要使用准备好的请求触发还原操作,请使用 Start-AzDataProtectionBackupInstanceRestore cmdlet

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

跟踪作业

使用 Get-AzDataProtectionJob cmdlet 跟踪所有作业。 你可以列出所有作业并提取特定作业详细信息。

还可使用 Az.ResourceGraph 来跟踪所有备份保管库中的作业。 使用 Search-AzDataProtectionJobInAzGraph cmdlet 获取所有备份保管库中相关的作业。

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

后续步骤

排查 Azure Database for PostgreSQL 灵活服务器备份和还原操作中的常见错误