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


Резервное копирование баз данных PostgreSQL с помощью Azure CLI

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

Дополнительные сведения о поддерживаемых сценариях и часто задаваемых вопросы о резервном копировании базы данных Azure для PostgreSQL.

Создайте резервное хранилище

Хранилище резервных копий — это элемент хранилища в Azure. Он сохраняет данные резервного копирования для новых рабочих нагрузок, поддерживаемых Azure Backup, таких как серверы Базы данных Azure для PostgreSQL, большие двоичные объекты в учетной записи хранения и диски Azure. Хранилища Azure Backup упрощают организацию данных резервного копирования и одновременно снижают накладные затраты на управление. Хранилища резервных копий основаны на модели Azure Resource Manager, которая предоставляет расширенные возможности для защиты резервных данных.

Перед созданием хранилища Backup выберите избыточность данных в хранилище. Затем перейдите к созданию резервного хранилища с данной избыточностью и местоположением.

В этой статье вы создадите хранилище резервных копий с именем TestBkpVaultв регионе westus в группе testBkpVaultRGресурсов. az dataprotection vault create Используйте команду для создания хранилища резервных копий. Дополнительные сведения о создании хранилища резервных копий.

az dataprotection backup-vault create -g testBkpVaultRG --vault-name TestBkpVault -l westus --type SystemAssigned --storage-settings datastore-type="VaultStore" type="LocallyRedundant"

{
  "eTag": null,
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/testBkpVaultRG/providers/Microsoft.DataProtection/BackupVaults/TestBkpVault",
  "identity": {
    "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
    "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "type": "SystemAssigned"
  },
  "location": "westus",
  "name": "TestBkpVault",
  "properties": {
    "provisioningState": "Succeeded",
    "storageSettings": [
      {
        "datastoreType": "VaultStore",
        "type": "LocallyRedundant"
      }
    ]
  },
  "resourceGroup": "testBkpVaultRG",
  "systemData": null,
  "tags": null,
  "type": "Microsoft.DataProtection/backupVaults"
}

Создание политики резервного копирования

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

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

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

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

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

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

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

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

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

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

Получение шаблона политики

Чтобы понять внутренние компоненты политики резервного копирования для резервной копии базы данных PostgreSQL, получите шаблон политики с помощью az dataprotection backup-policy get-default-policy-template команды. Эта команда возвращает шаблон политики по умолчанию для типа источника данных. Используйте этот шаблон политики для создания новой политики.

az dataprotection backup-policy get-default-policy-template --datasource-type AzureDatabaseForPostgreSQL
{
  "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"
    }
  ]
}

Шаблон политики состоит из триггера (который решает, что активирует резервную копию) и жизненный цикл (который решает, когда следует удалять, копировать или перемещать резервную копию). В резервной копии базы данных PostgreSQL значение по умолчанию для триггера — это запланированный еженедельный триггер (одна резервная копия каждые семь дней). Каждая резервная копия сохраняется в течение трех месяцев.

Запланированный триггер

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

Жизненный цикл по умолчанию для правила содержания под стражей

 {
      "isDefault": true,
      "lifecycles": [
        {
          "deleteAfter": {
            "duration": "P3M",
            "objectType": "AbsoluteDeleteOption"
          },
          "sourceDataStore": {
            "dataStoreType": "VaultStore",
            "objectType": "DataStoreInfoBase"
          },
          "targetDataStoreCopySettings": []
        }
      ],
      "name": "Default",
      "objectType": "AzureRetentionRule"
    }

Изменение шаблона политики

В Azure PowerShell можно использовать объекты в качестве промежуточных расположений для выполнения всех изменений. В Azure CLI необходимо использовать файлы, так как нет понятия об объектах. Каждая операция редактирования должна быть перенаправлена в новый файл, где содержимое считывается из входного файла и перенаправляется в выходной файл. Позже вы можете переименовать файл по мере необходимости при его использовании в скрипте.

Изменение расписания

Шаблон политики по умолчанию предлагает резервное копирование один раз в неделю. Вы можете изменить расписание резервного копирования, чтобы оно выполнялось несколько дней в неделю. Чтобы изменить расписание, используйте az dataprotection backup-policy trigger set команду.

Следующий пример изменяет еженедельную резервную копию в воскресенье, среду и пятницу каждой недели. Массив дат расписания упоминает даты и дни недели для этих дат принимаются в качестве дней недели. Кроме того, необходимо указать, что эти расписания должны повторяться каждую неделю. Таким образом, интервал расписания - 1, а тип интервала - Weekly.

az dataprotection backup-policy trigger create-schedule --interval-type Weekly --interval-count 1 --schedule-days 2021-08-15T22:00:00 2021-08-18T22:00:00 2021-08-20T22:00:00
[
  "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"
]

az dataprotection backup-policy trigger set --policy .\OSSPolicy.json  --schedule 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 > EditedOSSPolicy.json

Добавление нового правила хранения

Если вы хотите добавить защиту архива, необходимо изменить шаблон политики.

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

Кроме того, правило должно определить, как долго хранить данные в архивном хранилище данных. Чтобы создать новые жизненные циклы, используйте az dataprotection backup-policy retention-rule create-lifecycle команду. Чтобы связать эти жизненные циклы с новыми или существующими правилами az dataprotection backup-policy retention-rule set , используйте команду.

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

az dataprotection backup-policy retention-rule create-lifecycle --retention-duration-count 6 --retention-duration-type Months --source-datastore VaultStore --target-datastore ArchiveStore --copy-option CopyOnExpiryOption > VaultToArchiveLifeCycle.JSON

az dataprotection backup-policy retention-rule create-lifecycle --retention-duration-count 24 --retention-duration-type Months -source-datastore ArchiveStore > OnArchiveLifeCycle.JSON

az dataprotection backup-policy retention-rule set --lifecycles .\VaultToArchiveLifeCycle.JSON .\OnArchiveLifeCycle.JSON --name Monthly --policy .\EditedOSSPolicy.JSON > AddedRetentionRulePolicy.JSON

Добавление тега и соответствующих критериев

После создания правила хранения необходимо создать соответствующий тег в Trigger свойстве политики резервного копирования. Чтобы создать новые критерии тегов, используйте команду az dataprotection backup-policy tag create-absolute-criteria. Чтобы обновить существующий тег или создать новый тег, используйте az dataprotection backup-policy tag set команду.

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

В этом примере критерии тега называются Monthly:

az dataprotection backup-policy tag create-absolute-criteria --absolute-criteria FirstOfMonth > tagCriteria.JSON
az dataprotection backup-policy tag set --criteria .\tagCriteria.JSON --name Monthly --policy .\AddedRetentionRulePolicy.JSON > AddedRetentionRuleAndTag.JSON

Если расписание включает несколько резервных копий в неделю (воскресенье, среда и четверг, как указано в предыдущем примере), и вы хотите архивировать резервные копии в воскресенье и пятницу, можно изменить критерии тегов с помощью команды az dataprotection backup-policy tag create-generic-criteria.

az dataprotection backup-policy tag create-generic-criteria --days-of-week Sunday Friday > tagCriteria.JSON
az dataprotection backup-policy tag set --criteria .\tagCriteria.JSON --name Monthly --policy .\AddedRetentionRulePolicy.JSON > AddedRetentionRuleAndTag.JSON

Создание политики резервного копирования PostgreSQL

После изменения шаблона в соответствии с требованиями используйте az dataprotection backup-policy create команду для создания политики с помощью измененного шаблона:

az dataprotection backup-policy create --backup-policy-name FinalOSSPolicy --policy AddedRetentionRuleAndTag.JSON --resource-group testBkpVaultRG --vault-name TestBkpVault

Настроить резервное копирование

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

Понимание ключевых сущностей

База данных PostgreSQL для резервного копирования

Получите идентификатор Resource Manager базы данных PostgreSQL для его резервирования. Этот идентификатор служит идентификатором базы данных. В следующем примере используется база данных с именем empdb11 под сервером testposgresqlPostgreSQL, которая присутствует в группе ossrg ресурсов в другой подписке. В примере используется Bash.

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

Хранилище ключей

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

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

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

Хранилище резервных копий

Хранилище резервных копий должно подключиться к серверу PostgreSQL, а затем получить доступ к базе данных с помощью ключей, находящихся в хранилище ключей. Таким образом, хранилище резервных копий требует доступа к серверу PostgreSQL и хранилищу ключей. Доступ предоставляется управляемому удостоверению хранилища резервных копий.

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

Подготовка запроса

После установки всех соответствующих разрешений выполните настройку резервной копии двумя шагами:

  1. Подготовьте запрос с помощью соответствующего хранилища, политики и базы данных PostgreSQL в команде az dataprotection backup-instance initialize .
  2. Отправьте запрос на резервное копирование базы данных с помощью az dataprotection backup-instance create команды.
az dataprotection backup-instance initialize --datasource-id $ossId --datasource-type AzureDatabaseForPostgreSQL -l <vault-location> --policy-id <policy_arm_id>  --secret-store-type AzureKeyVault --secret-store-uri $keyURI > OSSBkpInstance.JSON

az dataprotection backup-instance create --resource-group testBkpVaultRG --vault-name TestBkpVault TestBkpvault --backup-instance .\OSSBkpInstance.JSON

Выполнение резервного копирования по требованию

При активации резервной копии необходимо указать правило хранения. Чтобы просмотреть правила хранения в политике, просмотрите JSON-файл политики. В следующем примере есть два правила хранения с именами Default и Monthly. В этой статье используется Monthly правило резервного копирования по запросу.

az dataprotection backup-policy show  -g ossdemorg --vault-name ossdemovault-1 --subscription e3d2d341-4ddb-4c5d-9121-69b7e719485e --name osspol5
{
  "id": "/subscriptions/e3d2d341-4ddb-4c5d-9121-69b7e719485e/resourceGroups/ossdemorg/providers/Microsoft.DataProtection/backupVaults/ossdemovault-1/backupPolicies/osspol5",
  "name": "osspol5",
  "properties": {
    "datasourceTypes": [
      "Microsoft.DBforPostgreSQL/servers/databases"
    ],
    "objectType": "BackupPolicy",
    "policyRules": [
      {
        "backupParameters": {
          "backupType": "Full",
          "objectType": "AzureBackupParams"
        },
        "dataStore": {
          "dataStoreType": "VaultStore",
          "objectType": "DataStoreInfoBase"
        },
        "name": "BackupWeekly",
        "objectType": "AzureBackupRule",
        "trigger": {
          "objectType": "ScheduleBasedTriggerContext",
          "schedule": {
            "repeatingTimeIntervals": [
              "R/2020-04-04T20:00:00+00:00/P1W",
              "R/2020-04-01T20:00:00+00:00/P1W"
            ],
            "timeZone": "UTC"
          },
          "taggingCriteria": [
            {
              "criteria": [
                {
                  "absoluteCriteria": [
                    "FirstOfMonth"
                  ],
                  "daysOfMonth": null,
                  "daysOfTheWeek": null,
                  "monthsOfYear": null,
                  "objectType": "ScheduleBasedBackupCriteria",
                  "scheduleTimes": null,
                  "weeksOfTheMonth": null
                }
              ],
              "isDefault": false,
              "tagInfo": {
                "eTag": null,
                "id": "Monthly_",
                "tagName": "Monthly"
              },
              "taggingPriority": 15
            },
            {
              "criteria": null,
              "isDefault": true,
              "tagInfo": {
                "eTag": null,
                "id": "Default_",
                "tagName": "Default"
              },
              "taggingPriority": 99
            }
          ]
        }
      },
      {
        "isDefault": false,
        "lifecycles": [
          {
            "deleteAfter": {
              "duration": "P10Y",
              "objectType": "AbsoluteDeleteOption"
            },
            "sourceDataStore": {
              "dataStoreType": "VaultStore",
              "objectType": "DataStoreInfoBase"
            },
            "targetDataStoreCopySettings": []
          }
        ],
        "name": "Monthly",
        "objectType": "AzureRetentionRule"
      },
      {
        "isDefault": true,
        "lifecycles": [
          {
            "deleteAfter": {
              "duration": "P1Y",
              "objectType": "AbsoluteDeleteOption"
            },
            "sourceDataStore": {
              "dataStoreType": "VaultStore",
              "objectType": "DataStoreInfoBase"
            },
            "targetDataStoreCopySettings": []
          }
        ],
        "name": "Default",
        "objectType": "AzureRetentionRule"
      }
    ]
  },
  "resourceGroup": "ossdemorg",
  "systemData": null,
  "type": "Microsoft.DataProtection/backupVaults/backupPolicies"
}

Чтобы активировать резервное копирование по запросу az dataprotection backup-instance adhoc-backup , используйте команду:

az dataprotection backup-instance adhoc-backup --name "ossrg-empdb11" --rule-name "Monthly" --resource-group testBkpVaultRG --vault-name TestBkpVault

Отслеживание работ

Отслеживайте все задания с помощью az dataprotection job list команды. Можно вывести список всех заданий и получить сведения о конкретном задании.

Вы также можете отслеживать Az.ResourceGraph все задания во всех хранилищах резервных копий. Используйте команду az dataprotection job list-from-resourcegraph для получения соответствующих заданий в резервных хранилищах:

az dataprotection job list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQL --status Completed