你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Azure PowerShell 备份 Azure Database for PostgreSQL - 灵活服务器(预览版)

本文介绍如何使用 Azure PowerShell 备份 Azure PostgreSQL 数据库

在本文中,学习如何:

  • 创建备份保管库

  • 创建备份策略

  • 配置 Azure Database for PostgreSQL - 灵活服务器的备份

  • 运行按需备份作业

有关 Azure Database for PostgreSQL - 灵活服务器支持的方案和限制的信息,请参阅支持矩阵

创建备份保管库

备份保管库是 Azure 中的存储实体。 它存储 Azure 备份支持的新工作负荷的备份数据。 例如,Azure Database for PostgreSQL - 灵活服务器、存储帐户中的 blob,以及 Azure 磁盘。 备份保管库帮助组织备份数据,并最大限度降低管理开销。 备份保管库基于 Azure 的 Azure 资源管理器型号,提供增强的功能来帮助保护备份数据。

在创建备份保管库之前,请选择保管库数据的存储冗余。 然后继续使用该存储冗余和位置创建备份保管库。

在本文中,我们将在资源组“testBkpVaultRG”下的“westus”区域中创建备份保管库“TestBkpVault”。 使用 New-AzDataProtectionBackupVault 命令创建备份保管库。 详细了解创建备份保管库

$storageSetting = New-AzDataProtectionBackupVaultStorageSettingObject -Type LocallyRedundant/GeoRedundant -DataStoreType VaultStore
New-AzDataProtectionBackupVault -ResourceGroupName testBkpVaultRG -VaultName TestBkpVault -Location westus -StorageSetting $storageSetting
$TestBkpVault = Get-AzDataProtectionBackupVault -VaultName TestBkpVault
$TestBKPVault | fl
ETag                :
Id                  : /subscriptions/00001111-aaaa-2222-bbbb-3333cccc4444/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/TestBkpVault
Identity            : Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210201Preview.DppIdentityDetails
IdentityPrincipalId :
IdentityTenantId    :
IdentityType        :
Location            : westus
Name                : TestBkpVault
ProvisioningState   : Succeeded
StorageSetting      : {Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210201Preview.StorageSetting}
SystemData          : Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210201Preview.SystemData
Tag                 : Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210201Preview.DppTrackedResourceTags
Type                : Microsoft.DataProtection/backupVaults

创建保管库后,我们要创建一个备份策略来保护 Azure PostgreSQL - 灵活服务器数据库。

创建备份策略

了解 PostgreSQL - 灵活服务器备份策略

我们来了解 PostgreSQL - 灵活服务器的备份策略对象。

  • PolicyRule
    • BackupRule
      • BackupParameter
        • BackupType(在本例中是一个完整的服务器备份)
        • 初始数据存储(备份的初始位置)
        • 触发器(如何触发备份)
          • 基于计划
          • 默认标记条件(一个默认“标记”用于所有计划的备份。此标记将备份链接到保留期规则)
    • 默认保留规则(该规则默认应用于初始数据存储上的所有备份)

因此,此对象定义触发哪些类型的备份、如何触发备份(通过计划)、它们的标签是什么、它们在何处登陆(数据存储),以及数据存储中备份数据的生命周期。 PostgreSQL - 灵活服务器的默认对象指示每周触发一次完整备份,然后它们会到达存储库,在那里存储三个月。

检索策略模板

若要了解用于 Azure PostgreSQL - 灵活服务器数据库备份的备份策略的内部组件,请使用 Get-AzDataProtectionPolicyTemplate 命令来检索策略模板。 此命令返回给定数据源类型的默认策略模板。 使用此策略模板创建新策略。

$policyDefn = Get-AzDataProtectionPolicyTemplate -DatasourceType AzureDatabaseForPGFlexServer
$policyDefn | fl


DatasourceType : {Microsoft.DBforPostgreSQL/flexibleServers/databases}
ObjectType     : BackupPolicy
PolicyRule     : {BackupWeekly, Default}

$policyDefn.PolicyRule | fl


BackupParameter           : Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210701.AzureBackupParams
BackupParameterObjectType : AzureBackupParams
DataStoreObjectType       : DataStoreInfoBase
DataStoreType             : VaultStore
Name                      : BackupWeekly
ObjectType                : AzureBackupRule
Trigger                   : Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210701.ScheduleBasedTriggerCo
                            ntext
TriggerObjectType         : ScheduleBasedTriggerContext

IsDefault  : True
Lifecycle  : {Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210701.SourceLifeCycle}
Name       : Default
ObjectType : AzureRetentionRule

策略模板由触发器(决定备份的触发因素)和生命周期(决定删除/复制/移动备份的时间)。 在 Azure PostgreSQL - 灵活服务器数据库备份中,触发器的默认值是计划每周触发一次(每 7 天备份 1 次)且每个备份保留三个月。

 $policyDefn.PolicyRule[0].Trigger | fl


ObjectType                    : ScheduleBasedTriggerContext
ScheduleRepeatingTimeInterval : {R/2021-08-22T02:00:00+00:00/P1W}
ScheduleTimeZone              : UTC
TaggingCriterion              : {Default}
$policyDefn.PolicyRule[1].Lifecycle | fl


DeleteAfterDuration        : P3M
DeleteAfterObjectType      : AbsoluteDeleteOption
SourceDataStoreObjectType  : DataStoreInfoBase
SourceDataStoreType        : VaultStore
TargetDataStoreCopySetting : {}

修改策略模板

修改计划

默认策略模板每周提供一次备份。 可以将备份计划修改为每周发生多天。 若要更改计划,请使用 Edit-AzDataProtectionPolicyTriggerClientObject 命令。

以下示例将每周备份修改为每周的星期日、星期三和星期五进行备份。 计划日期数组提及日期,这些日期的星期几将视为一周中的几天。 还需要指定这些计划应每周重复一次。 因此,计划间隔为“1”,间隔类型为“每周”。

$schDates = @(
	(
		(Get-Date -Year 2021 -Month 08 -Day 15 -Hour 22 -Minute 0 -Second 0)
	), 
	(
		(Get-Date -Year 2021 -Month 08 -Day 18 -Hour 22 -Minute 0 -Second 0)
	),
  (
		(Get-Date -Year 2021 -Month 08 -Day 20 -Hour 22 -Minute 0 -Second 0)
	)
)
$trigger = New-AzDataProtectionPolicyTriggerScheduleClientObject -ScheduleDays $schDates -IntervalType Weekly -IntervalCount 1 
Edit-AzDataProtectionPolicyTriggerClientObject -Schedule $trigger -Policy $policyDefn   

添加新保留规则

默认模板具有默认保留规则下的初始数据存储的生命周期。 在此方案中,规则指出在三个月后删除备份数据。 使用 New-AzDataProtectionRetentionLifeCycleClientObject 命令创建新的生命周期,并使用 Edit-AzDataProtectionPolicyRetentionRuleClientObject 命令将它们与新规则或现有规则关联。

以下示例创建名为“每月”的新保留规则,其中每月的第一次成功备份应在保管库中保留六个月。

$VaultLifeCycle = New-AzDataProtectionRetentionLifeCycleClientObject -SourceDataStore VaultStore -SourceRetentionDurationType Months -SourceRetentionDurationCount 6

Edit-AzDataProtectionPolicyRetentionRuleClientObject -Policy $policyDefn -Name Monthly -LifeCycles $VaultLifeCycle -IsDefault $false

添加标记和相关条件

创建保留规则后,你必须在备份策略的“触发器”属性中创建相应的标记。 使用 New-AzDataProtectionPolicyTagCriteriaClientObject 命令创建新的标记条件,并使用 Edit-AzDataProtectionPolicyTagClientObject 命令更新现有标记或创建新标记。

以下示例创建一个新标记以及条件(这是当月的第一个成功备份),其名称与要应用的相应保留规则的名称相同。

本例中的标记条件应命名为“每月”。

$tagCriteria = New-AzDataProtectionPolicyTagCriteriaClientObject -AbsoluteCriteria FirstOfMonth
Edit-AzDataProtectionPolicyTagClientObject -Policy $policyDefn -Name Monthly -Criteria $tagCriteria

如果计划是每周(每个星期日、星期三、星期四,如示例所述)进行多次备份,并且你想要存档星期日和星期五的备份,则标记条件可以进行如下更改:

$tagCriteria = New-AzDataProtectionPolicyTagCriteriaClientObject -DaysOfWeek @("Sunday", "Friday")
Edit-AzDataProtectionPolicyTagClientObject -Policy $policyDefn -Name Monthly -Criteria $tagCriteria

创建新的 PostgreSQL - 灵活服务器备份策略

根据要求修改模板后,使用 New-AzDataProtectionBackupPolicy 命令来通过修改后的模板创建策略。

$polOss = New-AzDataProtectionBackupPolicy -ResourceGroupName testBkpVaultRG -VaultName TestBkpVault -Name "TestOSSPolicy" -Policy $policyDefn

配置备份

创建保管库和策略后,需要考虑 3 个关键点来保护 Azure PostgreSQL 数据库。

所涉关键实体

需要保护的 PostgreSQL - 灵活服务器

提取需要保护的 PostgreSQL - 灵活服务器的 Azure 资源管理器 ID(Azure 资源管理器 ID)。 此 ID 充当数据库服务器的标识符。 我们将以 PostgreSQL - 灵活服务器 testpgflex 为例,该服务器位于另一订阅下的资源组 ossrg 中

$ossId = "/subscriptions/00001111-aaaa-2222-bbbb-3333cccc4444/resourcegroups/ossrg/providers/Microsoft.DBforPostgreSQL/flexibleServers/testpgflex

#### Backup vault

You need to connect the Backup vault to the PostgreSQL - flexbile server. Access is granted to the Backup vault's MSI.

See the [permissions] (/backup-azure-database-postgresql-flex-overview.md#permissions-for-backup) you should grant to the Managed System Identity (MSI) of the Backup Vault on the PostgreSQL - flexible server.

### Prepare the request

Once all the relevant permissions are set, the configuration of the backup is performed in two steps.

1. We prepare the relevant request by using the relevant vault, policy, PostgreSQL - flexible server using the [Initialize-AzDataProtectionBackupInstance](/powershell/module/az.dataprotection/initialize-azdataprotectionbackupinstance) command.
1. We submit the request to protect the database server using the [New-AzDataProtectionBackupInstance](/powershell/module/az.dataprotection/new-azdataprotectionbackupinstance) command.

```azurepowershell
$instance = Initialize-AzDataProtectionBackupInstance -DatasourceType AzureDatabaseForPostgreSQLFlexibleServer -DatasourceLocation $TestBkpvault.Location -PolicyId $polOss[0].Id -DatasourceId $ossId ConvertTo-Json -InputObject $instance -Depth 4 

New-AzDataProtectionBackupInstance -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -BackupInstance $instance

Name                        Type                                         BackupInstanceName
----                        ----                                          ------------------
ossrg-testpgflex       Microsoft.DataProtection/backupVaults/backupInstances ossrg-testpgflex

运行按需备份

使用 Get-AzDataProtectionBackupInstance 命令提取用户需要触发备份的相关备份实例。

$instance = Get-AzDataProtectionBackupInstance -SubscriptionId aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e -ResourceGroupName testBkpVaultRG -VaultName $TestBkpVault.Name -Name BackupInstanceName

可在触发备份时指定保留规则。 若要查看策略保留规则,请导航在策略对象中。 在下面的示例中,会显示名为“默认”的规则。 我们使用该规则进行按需备份。

$ossPol.PolicyRule | fl


BackupParameter           : Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210201Preview.AzureBackupParams
BackupParameterObjectType : AzureBackupParams
DataStoreObjectType       : DataStoreInfoBase
DataStoreType             : OperationalStore
Name                      : BackupHourly
ObjectType                : AzureBackupRule
Trigger                   : Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210201Preview.ScheduleBasedTriggerContext
TriggerObjectType         : ScheduleBasedTriggerContext

IsDefault  : True
Lifecycle  : {Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210201Preview.SourceLifeCycle}
Name       : Default
ObjectType : AzureRetentionRule

若要触发按需备份,请使用 Backup-AzDataProtectionBackupInstanceAdhoc 命令。

$AllInstances = Get-AzDataProtectionBackupInstance -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name
Backup-AzDataProtectionBackupInstanceAdhoc -BackupInstanceName $AllInstances[0].Name -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -BackupRuleOptionRuleName "Default"

跟踪作业

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

还可使用 Az ResourceGraph 以跟踪所有备份保管库中的所有作业。 使用 Search-AzDataProtectionJobInAzGraph 命令,提取跨任何备份保管库的相关作业。

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

后续步骤