使用 Azure PowerShell 备份 PostgreSQL 数据库

本文介绍如何使用 Azure PowerShell 备份 Azure Database for PostgreSQL 。 还可以使用 Azure 门户Azure CLI 和适用于 PostgreSQL 数据库的 REST API 配置备份。

详细了解在 Azure Database for PostgreSQL 中备份 PostgreSQL 数据库的受支持方案和常见问题

创建备份保管库

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

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

在本文中,您将在区域 TestBkpVault、资源组 westus 下创建一个名为testBkpVaultRG的备份保管库。 使用 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/xxxxxxxx-xxxx-xxxx-xxxx/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

创建备份策略

创建保管库后,可以创建备份策略来帮助保护 PostgreSQL 数据库。 还可以 使用 REST API 为 PostgreSQL 数据库创建备份策略

了解 PostgreSQL 备份策略

尽管磁盘备份每天提供多个备份,且 Blob 备份是无需触发的连续备份,PostgreSQL 备份则提供存档保护。 首次发送到保管库的备份数据可以按照定义的规则或生命周期移动到存档层。

在此上下文中,以下层次结构可帮助你了解 PostgreSQL 的备份策略对象:

  • 策略规则
    • 备份规则
      • 备份参数
        • 备份类型(在本例中为完整数据库备份)
        • 初始数据存储(备份最初到达的位置)
        • 触发器(如何触发备份)
          • 时间表
          • 默认标记条件(将所有计划备份链接到保留规则的默认标记)
    • 默认保留规则(默认应用于初始数据存储上的所有备份的规则)

策略对象定义备份的类型、触发的方式(通过计划)、为备份增加的标签、备份存放的位置(数据存储)以及其在数据存储中的生命周期。

PostgreSQL 的默认 PowerShell 对象表示每周触发 完整 备份。 备份会到达保管库,并将在那里存储三个月。

如果要将存档层添加到策略,则必须确定数据何时从保管库移动到存档,数据将保留在存档中的时长,以及应将计划备份中的哪一个标记为可存档。 必须添加一个保留规则,该规则定义从保管库数据存储到存档数据存储的备份数据的生命周期。 保留规则还定义了备份数据将保留在存档数据存储中的时长。 然后,需要添加一个标记,将计划备份标记为符合存档条件。

生成的 PowerShell 对象如下所示:

  • 策略规则
    • 备份规则
      • 备份参数
        • 备份类型(在本例中为完整数据库备份)
        • 初始数据存储(备份最初到达的位置)
        • 触发器(如何触发备份)
          • 时间表
          • 默认标记条件(将所有计划备份链接到保留规则的默认标记)
          • 同名新保留规则的新标记条件
    • 默认保留规则(默认应用于初始数据存储上的所有备份的规则)
    • 新的保留规则
      • 生命周期
        • 源数据存储库
        • 源数据存储中删除的时间段
        • 复制到目标数据存储

检索策略模板

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

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


DatasourceType : {Microsoft.DBforPostgreSQL/servers/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

策略模板由触发器(决定哪些触发器触发备份)和生命周期(决定何时删除、复制或移动备份)组成。 在 PostgreSQL 数据库备份中,触发器的默认值是计划的每周触发器(每七天一次备份)。 每个备份将保留三个月。

 $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 ,间隔类型为 Weekly

$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 该命令。

以下示例创建一个名为Monthly的新保留规则。 在此规则中,每月第一次成功备份将保留在保管库中六个月,然后移至档案层,并在档案层保留24个月。

$VaultToArchiveLifeCycle = New-AzDataProtectionRetentionLifeCycleClientObject -SourceDataStore VaultStore -SourceRetentionDurationType Months -SourceRetentionDurationCount 6 -TargetDataStore ArchiveStore -CopyOption CopyOnExpiryOption

$OnArchiveLifeCycle = New-AzDataProtectionRetentionLifeCycleClientObject -SourceDataStore ArchiveStore -SourceRetentionDurationType Months -SourceRetentionDurationCount 24

Edit-AzDataProtectionPolicyRetentionRuleClientObject -Policy $policyDefn -Name Monthly -LifeCycles $VaultToArchiveLifeCycle, $OnArchiveLifeCycleLifeCycle -IsDefault $false

添加标记和相关条件

创建保留规则后,必须在备份策略的属性中创建 Trigger 相应的标记。 若要创建新的标记条件,请使用 New-AzDataProtectionPolicyTagCriteriaClientObject 命令。 若要更新现有标记或创建新标记,请使用 Edit-AzDataProtectionPolicyTagClientObject 命令。

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

在此示例中,标记条件被命名为 Monthly:

$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

配置备份

创建保管库和策略后,需要考虑三个关键点,以便在 Azure Database for PostgreSQL 中备份 PostgreSQL 数据库。

了解关键实体

要备份的 PostgreSQL 数据库

提取要备份的 PostgreSQL 数据库的资源管理器 ID。 此 ID 充当数据库的标识符。 以下示例使用在 PostgreSQL 服务器empdb11下命名testposgresql的数据库,该服务器位于不同订阅下的资源组ossrg中:

$ossId = "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourcegroups/ossrg/providers/Microsoft.DBforPostgreSQL/servers/archive-postgresql-ccy/databases/empdb11"

密钥保管库

Azure 备份服务不存储用于连接到 PostgreSQL 数据库的用户名和密码。 相反,备份管理员将密钥放入密钥保管库。 然后,Azure 备份服务访问密钥保管库、读取密钥并访问数据库。 请注意相关密钥的机密标识符。

$keyURI = "https://testkeyvaulteus.vault.azure.net/secrets/ossdbkey"

备份保管库

需要将备份保管库连接到 PostgreSQL 服务器,然后通过密钥保管库中存在的密钥访问数据库。 因此,备份保管库需要访问 PostgreSQL 服务器和密钥保管库。 向备份保管库的托管标识授予访问权限。

阅读应在 PostgreSQL 服务器和 Azure Key Vault(其中存储了数据库密钥)上授予备份保管库的托管标识的适当权限

准备请求

设置所有相关权限后,执行两个步骤中的备份配置:

  1. 使用相关保管库、策略、PostgreSQL 数据库通过 Initialize-AzDataProtectionBackupInstance 命令准备请求。
  2. 使用 New-AzDataProtectionBackupInstance 命令提交请求以备份数据库。
$instance = Initialize-AzDataProtectionBackupInstance -DatasourceType AzureDatabaseForPostgreSQL -DatasourceLocation $TestBkpvault.Location -PolicyId $polOss[0].Id -DatasourceId $ossId -SecretStoreURI $keyURI -SecretStoreType AzureKeyVault
ConvertTo-Json -InputObject $instance -Depth 4 
New-AzDataProtectionBackupInstance -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -BackupInstance $instance

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

运行按需备份

使用 Get-AzDataProtectionBackupInstance 命令获取相应的备份实例,然后触发备份:

$instance = Get-AzDataProtectionBackupInstance -SubscriptionId "xxxx-xxx-xxx" -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -Name "BackupInstanceName"

可以在触发备份时指定保留规则。 若要查看策略中的保留规则,请浏览策略对象。 在以下示例中,将显示具有名称 Default 的规则。 本文使用按需备份的示例规则。

$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 AzureDisk -Operation OnDemandBackup