Управление базами данных SQL на виртуальных машинах Azure с помощью Azure CLI

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

В этой статье вы узнаете, как выполнять следующие задачи.

  • выполнить мониторинг заданий резервного копирования и восстановления;
  • обеспечить защиту новых баз данных, добавленных в экземпляр SQL;
  • изменить политику;
  • Остановить защиту
  • Возобновить защиту

Если для настройки резервного копирования базы данных SQL вы следовали инструкциям из руководства по резервному копированию баз данных SQL в Azure c помощью CLI, вы используете следующие ресурсы:

  • группу ресурсов с именем SQLResourceGroup;
  • хранилище с именем SQLVault;
  • защищенный контейнер с именем VMAppContainer;Compute;SQLResourceGroup;testSQLVM;
  • резервная копия базы данных или элемента с именем sqldatabase;mssqlserver;master;
  • ресурсы в регионе westus2.

Azure CLI упрощает процесс управления базой данных SQL на виртуальной машине Azure, для которое настроено резервное копирование с помощью Azure Backup. В следующих разделах описаны все операции управления.

Примечание

Дополнительные сведения о поддерживаемых конфигурациях и сценариях можно найти в матрице резервной копии SQL.

выполнить мониторинг заданий резервного копирования и восстановления;

Для наблюдения за завершенными или выполняющимися в данный момент заданиями (резервного копирования или восстановления) используйте команду az backup job list. CLI также позволяет приостановить выполняющееся задание или подождать, пока задание не завершится.

az backup job list --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --output table

Результат выглядит так:

Name                                  Operation              Status      Item Name       			Start Time UTC
------------------------------------  ---------------        ---------   ----------      			-------------------  
e0f15dae-7cac-4475-a833-f52c50e5b6c3  ConfigureBackup        Completed   master [testSQLVM]         2019-12-03T03:09:210831+00:00  
ccdb4dce-8b15-47c5-8c46-b0985352238f  Backup (Full)          Completed   master [testSQLVM]   		2019-12-01T10:30:58.867489+00:00
4980af91-1090-49a6-ab96-13bc905a5282  Backup (Differential)  Completed   master [testSQLVM]			2019-12-01T10:36:00.563909+00:00
F7c68818-039f-4a0f-8d73-e0747e68a813  Restore (Log)          Completed   master [testSQLVM]			2019-12-03T05:44:51.081607+00:00

Изменение политики

Чтобы изменить политику, на которой основана конфигурации резервного копирования SQL, воспользуйтесь командой az backup policy set. Параметр name в этой команде ссылается на элемент архивации, политику которого нужно изменить. В нашем примере политика базы данных SQL sqldatabase;mssqlserver;master заменяется новой политикой newSQLPolicy. Вы можете создавать новые политики с помощью команды az backup policy create.

az backup item set-policy --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --policy-name newSQLPolicy \
    --name sqldatabase;mssqlserver;master \

Результат выглядит так:

Name                                  Operation        Status     Item Name    Backup Management Type    Start Time UTC                    Duration
------------------------------------  ---------------  ---------  -----------  ------------------------  --------------------------------  --------------
ba350996-99ea-46b1-aae2-e2096c1e28cd  ConfigureBackup  Completed  master       AzureWorkload             2022-06-22T08:24:03.958001+00:00  0:01:12.435765

Создание разностной резервной копии

Чтобы создать политику создания разностных резервных копий, воспользуйтесь командой az backup policy create со следующими параметрами:

  • --backup-management-type: рабочая нагрузка Azure;
  • --workload-type: SQL DataBase;
  • --name: имя политики;
  • --policy: файл JSON с соответствующими сведениями о расписании и хранении;
  • --resource-group: группа ресурсов хранилища;
  • --vault-name: имя хранилища.

Пример

az backup policy create --resource-group SQLResourceGroup --vault-name SQLVault --name SQLPolicy --backup-management-type AzureWorkload --policy SQLPolicy.json --workload-type SQLDataBase

Пример JSON (sqlpolicy.json):

  "eTag": null,
  "id": "/Subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupPolicies/SQLPolicy",
  "location": null,
  "name": "sqlpolicy",
  "properties": {
    "backupManagementType": "AzureWorkload",
    "workLoadType": "SQLDataBase",
    "settings": {
      "timeZone": "UTC",
      "issqlcompression": false,
      "isCompression": false
    },
    "subProtectionPolicy": [
      {
        "policyType": "Full",
        "schedulePolicy": {
          "schedulePolicyType": "SimpleSchedulePolicy",
          "scheduleRunFrequency": "Weekly",
          "scheduleRunDays": [
            "Sunday"
          ],
          "scheduleRunTimes": [
            "2022-06-13T19:30:00Z"
          ],
          "scheduleWeeklyFrequency": 0
        },
        "retentionPolicy": {
          "retentionPolicyType": "LongTermRetentionPolicy",
          "weeklySchedule": {
            "daysOfTheWeek": [
              "Sunday"
            ],
            "retentionTimes": [
              "2022-06-13T19:30:00Z"
            ],
            "retentionDuration": {
              "count": 104,
              "durationType": "Weeks"
            }
          },
          "monthlySchedule": {
            "retentionScheduleFormatType": "Weekly",
            "retentionScheduleWeekly": {
              "daysOfTheWeek": [
                "Sunday"
              ],
              "weeksOfTheMonth": [
                "First"
              ]
            },
            "retentionTimes": [
              "2022-06-13T19:30:00Z"
            ],
            "retentionDuration": {
              "count": 60,
              "durationType": "Months"
            }
          },
          "yearlySchedule": {
            "retentionScheduleFormatType": "Weekly",
            "monthsOfYear": [
              "January"
            ],
            "retentionScheduleWeekly": {
              "daysOfTheWeek": [
                "Sunday"
              ],
              "weeksOfTheMonth": [
                "First"
              ]
            },
            "retentionTimes": [
              "2022-06-13T19:30:00Z"
            ],
            "retentionDuration": {
              "count": 10,
              "durationType": "Years"
            }
          }
        }
      },
      {
        "policyType": "Differential",
        "schedulePolicy": {
          "schedulePolicyType": "SimpleSchedulePolicy",
          "scheduleRunFrequency": "Weekly",
          "scheduleRunDays": [
            "Monday",
            "Tuesday",
            "Wednesday",
            "Thursday",
            "Friday",
            "Saturday"
          ],
          "scheduleRunTimes": [
            "2022-06-13T02:00:00Z"
          ],
          "scheduleWeeklyFrequency": 0
        },
        "retentionPolicy": {
          "retentionPolicyType": "SimpleRetentionPolicy",
          "retentionDuration": {
            "count": 30,
            "durationType": "Days"
          }
        }
      },
      {
        "policyType": "Log",
        "schedulePolicy": {
          "schedulePolicyType": "LogSchedulePolicy",
          "scheduleFrequencyInMins": 120
        },
        "retentionPolicy": {
          "retentionPolicyType": "SimpleRetentionPolicy",
          "retentionDuration": {
            "count": 15,
            "durationType": "Days"
          }
        }
      }
    ],
    "protectedItemsCount": 0
  },
  "resourceGroup": "SQLResourceGroup",
  "tags": null,
  "type": "Microsoft.RecoveryServices/vaults/backupPolicies"
} 

После успешного создания политики в выходных данных команды выводится код JSON политики, которую вы передали в качестве параметра при выполнении команды.

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

Пример:

{
  "policyType": "Differential",
  "retentionPolicy": {
    "retentionDuration": {
      "count": 30,
      "durationType": "Days"
    },
    "retentionPolicyType": "SimpleRetentionPolicy"
  },
  "schedulePolicy": {
    "schedulePolicyType": "SimpleSchedulePolicy",
    "scheduleRunDays": [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday"
    ],
    "scheduleRunFrequency": "Weekly",
    "scheduleRunTimes": [
      "2017-03-07T02:00:00+00:00"
    ],
    "scheduleWeeklyFrequency": 0
  }
}

Пример:

Если требуется создавать разностные резервные копии только по субботам и хранить их в течение 60 дней, внесите в политику следующие изменения:

  • Измените значение retentionDuration на 60 дней.
  • Укажите для ScheduleRunDays только субботу.
 {
  "policyType": "Differential",
  "retentionPolicy": {
    "retentionDuration": {
      "count": 60,
      "durationType": "Days"
    },
    "retentionPolicyType": "SimpleRetentionPolicy"
  },
  "schedulePolicy": {
    "schedulePolicyType": "SimpleSchedulePolicy",
    "scheduleRunDays": [
      "Saturday"
    ],
    "scheduleRunFrequency": "Weekly",
    "scheduleRunTimes": [
      "2017-03-07T02:00:00+00:00"
    ],
    "scheduleWeeklyFrequency": 0
  }
}

Защита новых баз данных, добавляемых в экземпляр SQL

При регистрации экземпляра SQL в хранилище Служб восстановления автоматически обнаруживаются все базы данных в этом экземпляре.

Однако если вы добавили новые базы данных в экземпляр SQL позже, выполните команду az backup protectable-item initialize. Эта команда обнаруживает вновь добавленные базы данных.

az backup protectable-item initialize --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --workload-type SQLDataBase

После этого выполните командлет az backup protectable-item list, чтобы получить список всех баз данных, обнаруженных в экземпляре SQL. Но этот список не включает базы данных, для которых уже настроено резервное копирование. После обнаружения базы данных, для которой требуется резервное копирование, воспользуйтесь руководством Включение резервного копирования для базы данных SQL.

az backup protectable-item list --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --workload-type SQLDataBase \
	--protectable-item-type SQLDataBase \
    --output table

Новая база данных, для которой вы решили включить резервное копирование, появится в списке в следующем формате:

Name                            Protectable Item Type    ParentName    ServerName    IsProtected
---------------------------     ----------------------   ------------  -----------   ------------
sqldatabase;mssqlserver;db1     SQLDataBase              mssqlserver   testSQLVM	 NotProtected  
sqldatabase;mssqlserver;db2     SQLDataBase              mssqlserver   testSQLVM	 NotProtected

Остановка защиты для базы данных

Вы можете остановить защиту базы данных SQL одним из следующих методов:

  • можно остановить все будущие задания резервного копирования и удалить все точки восстановления;
  • остановить все будущие задания резервного копирования, но сохранить точки восстановления без изменений.

Если вы решили сохранить точки восстановления, учитывайте следующие факторы:

  • все точки восстановления навсегда остаются неизменными, и любая очистка прекращается одновременно с отключением защиты;
  • вы будете оплачивать работу защищенного экземпляр и используемый объем хранилища;
  • если вы удалите источник данных без остановки резервного копирования, новые операции резервного копирования будут завершаться сбоем.

Ниже подробно описаны процессы, позволяющие остановить защиту.

Отключите защиту с сохранением данных

Чтобы отключить защиту с сохранением данных, используйте команду az backup protection disable.

az backup protection disable --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
    --workload-type SQLDataBase \
    --output table

Результат выглядит так:

Name                                  ResourceGroup
------------------------------------  ---------------  
g0f15dae-7cac-4475-d833-f52c50e5b6c3  SQLResourceGroup

Чтобы проверить состояние этой операции, используйте команду az backup job show.

Отключение защиты без сохранения данных

Чтобы отключить защиту без сохранения данных, используйте команду az backup protection disable.

az backup protection disable --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
    --workload-type SQLDataBase \
    --delete-backup-data true \
    --output table

Результат выглядит так:

Name                                  ResourceGroup
------------------------------------  ---------------  
g0f15dae-7cac-4475-d833-f52c50e5b6c3  SQLResourceGroup

Чтобы проверить состояние этой операции, используйте команду az backup job show.

Возобновить защиту

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

Чтобы возобновить защиту, используйте команду az backup protection resume.

az backup protection resume --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --policy-name SQLPolicy \
    --output table

Результат выглядит так:

Name                                  ResourceGroup
------------------------------------  ---------------  
b2a7f108-1020-4529-870f-6c4c43e2bb9e  SQLResourceGroup

Чтобы проверить состояние этой операции, используйте команду az backup job show.

Дальнейшие действия