Поделиться через


Создание политик резервного копирования для баз данных PostgreSQL с помощью REST API защиты данных

Политика резервного копирования управляет хранением и расписанием резервных копий базы данных PostgreSQL в Базе данных Azure для PostgreSQL. База данных Azure для PostgreSQL обеспечивает долгосрочное хранение резервных копий базы данных и поддерживает резервное копирование в день.

Можно повторно использовать существующую политику резервного копирования для настройки резервных копий для баз данных PostgreSQL в хранилище или создать политику резервного копирования для хранилища служб восстановления Azure с помощью REST API защиты данных для Azure Backup. В этой статье вы создадите политику резервного копирования.

Общие сведения о политиках резервного копирования PostgreSQL

В то время как резервное копирование дисков предлагает несколько резервных копий в день, а резервное копирование BLOB-объектов — это непрерывная резервная копия без триггера, Служба архивации PostgreSQL обеспечивает защиту архива. Данные резервного копирования, которые сначала отправляются в хранилище, можно переместить на архивный уровень в соответствии с определенным правилом или жизненным циклом.

В этом контексте следующая иерархия поможет понять объект политики резервного копирования для PostgreSQL:

  • Правило политики
    • Правило резервного копирования
      • Параметр резервного копирования
        • Тип резервного копирования (полная резервная копия базы данных в данном случае)
        • Начальное хранилище данных (где изначально резервная копия)
        • Триггер (активация резервной копии)
          • Расписание
          • Критерии тегов по умолчанию (тег по умолчанию, который связывает все запланированные резервные копии с правилом хранения).
    • Правило хранения по умолчанию (правило, применяемое ко всем резервным копиям по умолчанию в исходном хранилище данных)

Объект политики определяет, какие типы резервных копий активируются, как они активируются (с помощью расписания), то, что они помечены, где они находятся (хранилище данных) и жизненный цикл их данных в хранилище данных.

Объект PowerShell по умолчанию для PostgreSQL говорит, чтобы активировать полную резервную копию каждую неделю. Резервные копии достигают хранилища, где они хранятся в течение трех месяцев.

Если вы хотите добавить уровень архива в политику, необходимо решить, когда данные будут перемещены из хранилища в архив, как долго данные будут оставаться в архиве, и какие из запланированных резервных копий должны быть помечены как архивируемые. Необходимо добавить правило хранения, определяющее жизненный цикл резервных данных из хранилища данных в архивное хранилище данных. Правило хранения также определяет, как долго данные резервного копирования будут оставаться в архивном хранилище данных. Затем необходимо добавить тег, который помечает запланированные резервные копии как подходящие для архивирования.

Результирующий объект PowerShell выглядит следующим образом:

  • Правило политики
    • Правило резервного копирования
      • Параметр резервного копирования
        • Тип резервного копирования (полная резервная копия базы данных в данном случае)
        • Начальное хранилище данных (где изначально резервная копия)
        • Триггер (активация резервной копии)
          • Расписание
          • Критерии тегов по умолчанию (тег по умолчанию, который связывает все запланированные резервные копии с правилом хранения)
          • Новые критерии тегов для нового правила хранения с тем же именем
    • Правило хранения по умолчанию (правило, применяемое ко всем резервным копиям по умолчанию в исходном хранилище данных)
    • Новое правило хранения
      • Жизненный цикл
        • Исходное хранилище данных
        • Период времени удаления в исходном хранилище данных
        • Копирование в целевое хранилище данных

Создание политики

Внимание

В настоящее время обновление или изменение существующей политики не поддерживается. Вместо этого создайте новую политику с необходимыми сведениями и назначьте ее соответствующему экземпляру резервного копирования.

Чтобы создать политику резервного копирования, используйте следующую PUT операцию:

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

Универсальный {policyName} код ресурса (URI) предоставляет и {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"
}