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

使用数据保护 REST API 为 PostgreSQL 数据库创建备份策略

备份策略控制 Azure Database for PostgreSQL 中 PostgreSQL 数据库备份的保留和计划。 Azure Database for PostgreSQL 提供数据库备份的长期保留,并支持每天备份。

可以重复使用现有的备份策略,将 PostgreSQL 数据库的备份配置为保管库,也可以使用 适用于 Azure 备份的数据保护 REST API 为 Azure 恢复服务保管库创建备份策略。 在本文中,将创建备份策略。

了解 PostgreSQL 备份策略

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

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

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

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

PostgreSQL 的默认 PowerShell 对象表示每周触发 完整 备份。 备份会到达保管库,其中存储了三个月。

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

生成的 PowerShell 对象如下所示:

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

创建策略

重要

目前不支持更新或修改现有策略。 而是使用所需的详细信息创建新策略,并将其分配给相关的备份实例。

若要创建备份策略,请使用以下 PUT 作:

PUT https://management.azure.com/Subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataProtection/backupVaults/{vaultName}/backupPolicies/{policyName}?api-version=2021-01-01

URI 提供 {policyName}{vaultName} 值。 请求正文提供了其他信息。

创建请求正文

若要为 PostgreSQL 备份创建策略,请求正文需要以下组件:

名称 必需 类型 说明
properties true BaseBackupPolicy: BackupPolicy BaseBackupPolicyResource 属性

有关请求正文中定义的完整列表,请参阅 REST API 备份策略

示例请求正文

该策略指出:

  • 触发器计划在所选的开始时间(时间 + P1W)为每周备份计划。
  • 数据存储是 保管库存储,因为备份直接传输到保管库。
  • 备份将保留在保管库中三个月(P3M)。
{
  "datasourceTypes": [
    "Microsoft.DBforPostgreSQL/servers/databases"
  ],
  "name": "OssPolicy1",
  "objectType": "BackupPolicy",
  "policyRules": [
    {
      "backupParameters": {
        "backupType": "Full",
        "objectType": "AzureBackupParams"
      },
      "dataStore": {
        "dataStoreType": "VaultStore",
        "objectType": "DataStoreInfoBase"
      },
      "name": "BackupWeekly",
      "objectType": "AzureBackupRule",
      "trigger": {
        "objectType": "ScheduleBasedTriggerContext",
        "schedule": {
          "repeatingTimeIntervals": [
            "R/2021-08-15T06:30:00+00:00/P1W"
          ],
          "timeZone": "UTC"
        },
        "taggingCriteria": [
          {
            "isDefault": true,
            "tagInfo": {
              "id": "Default_",
              "tagName": "Default"
            },
            "taggingPriority": 99
          }
        ]
      }
    },
    {
      "isDefault": true,
      "lifecycles": [
        {
          "deleteAfter": {
            "duration": "P3M",
            "objectType": "AbsoluteDeleteOption"
          },
          "sourceDataStore": {
            "dataStoreType": "VaultStore",
            "objectType": "DataStoreInfoBase"
          },
          "targetDataStoreCopySettings": []
        }
      ],
      "name": "Default",
      "objectType": "AzureRetentionRule"
    }
  ]
}

重要

时间格式仅 DateTime支持 。 不支持 Time。 一天中的时间指示备份开始时间,而不是结束时间。

让我们用两个更改更新前面的 JSON:

  • 在一周中的多天添加备份。
  • 添加存档数据存储,以便长期保留 PostgreSQL 数据库备份。

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

计划触发器

"trigger": {
        "objectType": "ScheduleBasedTriggerContext",
        "schedule": {
          "repeatingTimeIntervals": [
            "R/2021-08-15T22:00:00+00:00/P1W",
            "R/2021-08-18T22:00:00+00:00/P1W",
            "R/2021-08-20T22:00:00+00:00/P1W"
          ],
          "timeZone": "UTC"
        }

如果要添加存档保护,需要修改策略 JSON。

保留生命周期

上述 JSON 具有默认保留规则下的初始数据存储的生命周期。 在此方案中,规则指出在三个月后删除备份数据。 应添加一个新的保留规则,该规则定义何时将数据 移动到 存档数据存储。 也就是说,备份数据首先复制到存档数据存储,然后在保管库数据存储中删除。

此外,规则应定义保留存档数据存储中的数据的持续时间。 让我们将此新规则 Monthly命名。 它定义备份应在保管库数据存储中保留 6 个月,然后复制到存档数据存储。 然后,删除保管库数据存储中的备份,并在存档数据存储中保留 24 个月的数据。 最后,删除存档数据存储中的数据。

"lifecycles": [
        {
          "deleteAfter": {
            "duration": "P3M",
            "objectType": "AbsoluteDeleteOption"
          },
          "sourceDataStore": {
            "dataStoreType": "VaultStore",
            "objectType": "DataStoreInfoBase"
          },
          "targetDataStoreCopySettings": []
        }
      ],
      "name": "Default",
      "objectType": "AzureRetentionRule"
    },
    {
      "isDefault": false,
      "lifecycles": [
        {
          "deleteAfter": {
            "duration": "P6M",
            "objectType": "AbsoluteDeleteOption"
          },
          "sourceDataStore": {
            "dataStoreType": "VaultStore",
            "objectType": "DataStoreInfoBase"
          },
          "targetDataStoreCopySettings": {
            "copyAfter": {
              "objectType": "CopyOnExpiryOption"
            },
            "dataStore": {
              "dataStoreType": "ArchiveStore",
              "objectType": "DataStoreInfoBase"
            }
          }
        },
        {
          "deleteAfter": {
            "duration": "P24M",
            "objectType": "AbsoluteDeleteOption"
          },
          "sourceDataStore": {
            "dataStoreType": "ArchiveStore",
            "objectType": "DataStoreInfoBase"
          },
          "targetDataStoreCopySettings": null
        }
      ],
      "name": "Monthly",
      "objectType": "AzureRetentionRule"
    }

标记条件

每次添加保留规则时,都需要在策略的属性中添加 Trigger 相应的标记。 以下示例创建一个新标记以及条件(即月份的第一次成功备份),其名称与要应用的相应保留规则完全相同。

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

{
  "criteria": [
    {
      "absoluteCriteria": [
        "FirstOfMonth"
      ],
      "objectType": "ScheduleBasedBackupCriteria"
    }
  ],
  "isDefault": false,
  "tagInfo": {
    "tagName": "Monthly"
  },
  "taggingPriority": 15
}

包括所有更改后,策略 JSON 如下所示:

{
  "datasourceTypes": [
    "Microsoft.DBforPostgreSQL/servers/databases"
  ],
  "name": "OssPolicy1",
  "objectType": "BackupPolicy",
  "policyRules": [
    {
      "backupParameters": {
        "backupType": "Full",
        "objectType": "AzureBackupParams"
      },
      "dataStore": {
        "dataStoreType": "VaultStore",
        "objectType": "DataStoreInfoBase"
      },
      "name": "BackupWeekly",
      "objectType": "AzureBackupRule",
      "trigger": {
        "objectType": "ScheduleBasedTriggerContext",
        "schedule": {
          "repeatingTimeIntervals": [
            "R/2021-08-15T22:00:00+00:00/P1W",
            "R/2021-08-18T22:00:00+00:00/P1W",
            "R/2021-08-20T22:00:00+00:00/P1W"
          ],
          "timeZone": "UTC"
        },
        "taggingCriteria": [
          {
            "isDefault": true,
            "tagInfo": {
              "id": "Default_",
              "tagName": "Default"
            },
            "taggingPriority": 99
          },
          {
            "criteria": [
              {
                "absoluteCriteria": [
                  "FirstOfMonth"
                ],
                "objectType": "ScheduleBasedBackupCriteria"
              }
            ],
            "isDefault": false,
            "tagInfo": {
              "tagName": "Monthly"
            },
            "taggingPriority": 15
          }
        ]
      }
    },
    {
      "isDefault": true,
      "lifecycles": [
        {
          "deleteAfter": {
            "duration": "P3M",
            "objectType": "AbsoluteDeleteOption"
          },
          "sourceDataStore": {
            "dataStoreType": "VaultStore",
            "objectType": "DataStoreInfoBase"
          },
          "targetDataStoreCopySettings": []
        }
      ],
      "name": "Default",
      "objectType": "AzureRetentionRule"
    },
    {
      "isDefault": false,
      "lifecycles": [
        {
          "deleteAfter": {
            "duration": "P6M",
            "objectType": "AbsoluteDeleteOption"
          },
          "sourceDataStore": {
            "dataStoreType": "VaultStore",
            "objectType": "DataStoreInfoBase"
          },
          "targetDataStoreCopySettings": {
            "copyAfter": {
              "objectType": "CopyOnExpiryOption"
            },
            "dataStore": {
              "dataStoreType": "ArchiveStore",
              "objectType": "DataStoreInfoBase"
            }
          }
        },
        {
          "deleteAfter": {
            "duration": "P24M",
            "objectType": "AbsoluteDeleteOption"
          },
          "sourceDataStore": {
            "dataStoreType": "ArchiveStore",
            "objectType": "DataStoreInfoBase"
          },
          "targetDataStoreCopySettings": null
        }
      ],
      "name": "Monthly",
      "objectType": "AzureRetentionRule"
    }
  ]
}

有关策略创建的详细信息,请参阅 “创建备份策略”。

检查响应

备份策略创建或更新是同步作。 作成功后,它将返回以下状态响应,并在响应正文中返回策略内容。

名称 类型 说明
200 OK BaseBackupPolicyResource 作已完成。

示例响应

{
    "properties": {
        "policyRules": [
            {
                "backupParameters": {
                    "backupType": "Full",
                    "objectType": "AzureBackupParams"
                },
                "trigger": {
                    "schedule": {
                        "repeatingTimeIntervals": [
                            "R/2021-08-15T22:00:00+00:00/P1W",
                            "R/2021-08-18T22:00:00+00:00/P1W",
                            "R/2021-08-20T22:00:00+00:00/P1W"
                        ],
                        "timeZone": "UTC"
                    },
                    "taggingCriteria": [
                        {
                            "tagInfo": {
                                "tagName": "Monthly",
                                "id": "Monthly_"
                            },
                            "taggingPriority": 15,
                            "isDefault": false,
                            "criteria": [
                                {
                                    "absoluteCriteria": [
                                        "FirstOfMonth"
                                    ],
                                    "objectType": "ScheduleBasedBackupCriteria"
                                }
                            ]
                        },
                        {
                            "tagInfo": {
                                "tagName": "Default",
                                "id": "Default_"
                            },
                            "taggingPriority": 99,
                            "isDefault": true
                        }
                    ],
                    "objectType": "ScheduleBasedTriggerContext"
                },
                "dataStore": {
                    "dataStoreType": "VaultStore",
                    "objectType": "DataStoreInfoBase"
                },
                "name": "BackupWeekly",
                "objectType": "AzureBackupRule"
            },
            {
                "lifecycles": [
                    {
                        "deleteAfter": {
                            "objectType": "AbsoluteDeleteOption",
                            "duration": "P6M"
                        },
                        "targetDataStoreCopySettings": [
                            {
                                "dataStore": {
                                    "dataStoreType": "ArchiveStore",
                                    "objectType": "DataStoreInfoBase"
                                },
                                "copyAfter": {
                                    "objectType": "CopyOnExpiryOption"
                                }
                            }
                        ],
                        "sourceDataStore": {
                            "dataStoreType": "VaultStore",
                            "objectType": "DataStoreInfoBase"
                        }
                    },
                    {
                        "deleteAfter": {
                            "objectType": "AbsoluteDeleteOption",
                            "duration": "P24M"
                        },
                        "targetDataStoreCopySettings": [],
                        "sourceDataStore": {
                            "dataStoreType": "ArchiveStore",
                            "objectType": "DataStoreInfoBase"
                        }
                    }
                ],
                "isDefault": false,
                "name": "Monthly",
                "objectType": "AzureRetentionRule"
            },
            {
                "lifecycles": [
                    {
                        "deleteAfter": {
                            "objectType": "AbsoluteDeleteOption",
                            "duration": "P3M"
                        },
                        "targetDataStoreCopySettings": [],
                        "sourceDataStore": {
                            "dataStoreType": "VaultStore",
                            "objectType": "DataStoreInfoBase"
                        }
                    }
                ],
                "isDefault": true,
                "name": "Default",
                "objectType": "AzureRetentionRule"
            }
        ],
        "datasourceTypes": [
            "Microsoft.DBforPostgreSQL/servers/databases"
        ],
        "objectType": "BackupPolicy"
    },
    "id": "/subscriptions/ef4ab5a7-c2c0-4304-af80-af49f48af3d1/resourceGroups/DebRG1/providers/Microsoft.DataProtection/backupVaults/DebBackupVault/backupPolicies/OssPolicy1",
    "name": "OssPolicy1",
    "type": "Microsoft.DataProtection/backupVaults/backupPolicies"
}