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

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

Вы можете выполнять команды интерфейса командной строки с помощью Azure Cloud Shell.

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

  • Просмотр точек восстановления для базы данных с резервным копированием.
  • Восстановление базы данных

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

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

Примечание

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

Просмотр точек восстановления для базы данных с резервным копированием.

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

az backup recoverypoint list --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
   --output table

Список точек восстановления отображается в следующем виде:

Name                      Time                               BackupManagementType   Item Name               		RecoveryPointType
-------------------       ---------------------------------  ---------------------  ----------------------  		------------------
7660777527047692711       2019-12-10T04:00:32.346000+00:00   AzureWorkload          sqldatabase;mssqlserver;master  Full
7896624824685666836       2019-12-15T10:33:32.346000+00:00   AzureWorkload          sqldatabase;mssqlserver;master  Differential
DefaultRangeRecoveryPoint                                    AzureWorkload          sqldatabase;mssqlserver;master  Log

В приведенном выше списке вы видите три точки восстановления, по одной для полной копии, разностной копии и резервной копии журналов.

Примечание

Также с помощью команды az backup recoverypoint show-log-chain можно просмотреть начальную и конечную точки для каждой полной цепочки резервных копий журналов.

Предварительные условия для восстановления базы данных

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

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

Восстановление базы данных

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

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

Чтобы восстановить базу данных, используйте команду az restore restore-azurewl, который принимает в качестве входных данных объект конфигурации восстановления. Этот объект можно создать с помощью команды az backup recoveryconfig show. Объект конфигурации восстановления содержит все сведения для выполнения восстановления. Среди прочего он определяет режим восстановления: OriginalWorkloadRestore или AlternateWorkloadRestore.

Примечание

OriginalWorkloadRestore восстанавливает данные в том же экземпляре SQL, где находилась исходная база данных-источник. В этом варианте перезаписывается исходная база данных. AlternateWorkloadRestore обозначает восстановление базы данных в альтернативное расположение с сохранением исходной базы данных-источника.

Восстановление в альтернативном расположении

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

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

Используя указанные выше имя точки восстановления и режим восстановления, создайте объект конфигурации восстановления, используя команду az backup recoveryconfig show. Проверьте оставшиеся параметры в этой команде:

  • --target-item-name: имя, которое будет присвоено восстановленной базе данных. В нашем примере это имя restored_database.
  • --target-server-name обозначает имя сервера SQL, который успешно зарегистрирован в хранилище Служб восстановления и размещается в том же регионе, что и восстанавливаемая база данных. Здесь вы восстанавливаете базу данных на том же сервере SQL Server с именем testSQLVM, который вы защищали.
  • --target-server-type: для восстановления баз данных SQL необходимо указать значение SQLInstance.

az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name SQLDataBase;mssqlserver;master \
    --restore-mode AlternateWorkloadRestore \
    --rp-name 7660777527047692711 \
    --target-item-name restored_database \
    --target-server-name testSQLVM \
    --target-server-type SQLInstance \
    --workload-type SQLDataBase \
    --output json

В ответ на приведенный выше запрос возвращается примерно такой объект конфигурации восстановления:

{
  "container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;SQLResourceGroup;testSQLVM",
  "container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
  "database_name": "MSSQLSERVER/restored_database",
  "filepath": null,
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;master",
  "log_point_in_time": null,
  "recovery_mode": null,
  "recovery_point_id": "7660777527047692711",
  "restore_mode": "AlternateLocation",
  "source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
  "workload_type": "SQLDataBase",
  "alternate_directory_paths": []
}

Теперь выполните команду az restore restore-azurewl для восстановления базы данных. Чтобы использовать эту команду, введите приведенный выше код в формате JSON, сохраненный в файл с именем recoveryconfig.json.

az backup restore restore-azurewl --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --recovery-config recoveryconfig.json \
    --output table

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

Name                                  Operation    Status      Item Name                          Backup Management Type    Start Time UTC                    Duration
------------------------------------  -----------  ----------  ---------------------------------  ------------------------  --------------------------------  --------------
be7ea4a4-0752-4763-8570-a306b0a0106f  Restore      InProgress  master [testSQLVM]  				  AzureWorkload             2022-06-21T03:51:06.898981+00:00  0:00:05.652967

В ответе будет указано имя задания. Имя задания позволяет отслеживать состояние задания с помощью команды az backup job show.

Восстановление и перезапись

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

Давайте для примера выберем восстановление из последней точки восстановления "28-11-2019-09:53:00". Эту точку восстановления можно указать в следующих форматах: дд-мм-гггг, дд-мм-гггг-чч:мм:сс. Чтобы выбрать допустимую точку восстановления, используйте команду az backup recoverypoint show-log-chain, которая позволяет получить интервалы полных цепочек резервных копий журналов.

az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
    --restore-mode OriginalWorkloadRestore \
    --log-point-in-time 20-06-2022-09:02:41 \
    --output json

В ответ на приведенный выше запрос возвращается примерно такой объект конфигурации восстановления:

{
  "alternate_directory_paths": null,
  "container_id": null,
  "container_uri": "VMAppContainer;compute;petronasinternaltest;sqlserver-11",
  "database_name": null,
  "filepath": null,
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;msdb",
  "log_point_in_time": "20-06-2022-09:02:41",
  "recovery_mode": null,
  "recovery_point_id": "DefaultRangeRecoveryPoint",
  "restore_mode": "OriginalLocation",
  "source_resource_id": "/subscriptions/62b829ee-7936-40c9-a1c9-47a93f9f3965/resourceGroups/petronasinternaltest/providers/Microsoft.Compute/virtualMachines/sqlserver-11",
  "workload_type": "SQLDataBase"
}

Теперь выполните команду az restore restore-azurewl для восстановления базы данных. Чтобы использовать эту команду, введите приведенный выше код в формате JSON, сохраненный в файл с именем recoveryconfig.json.

az backup restore restore-azurewl --resource-group sqlResourceGroup \
    --vault-name sqlVault \
    --recovery-config recoveryconfig.json \
    --output table

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

Name                                  Operation    Status      Item Name                        Backup Management Type    Start Time UTC                    Duration
------------------------------------  -----------  ----------  -------------------------------  ------------------------  --------------------------------  --------------
1730ec49-166a-4bfd-99d5-93027c2d8480  Restore      InProgress  master [testSQLVM]  				AzureWorkload             2022-06-21T04:04:11.161411+00:00  0:00:03.118076

В ответе будет указано имя задания. Имя задания позволяет отслеживать состояние задания с помощью команды az backup job show.

Восстановление в дополнительный регион

Чтобы восстановить базу данных в дополнительном регионе, укажите в конфигурации восстановления целевое хранилище и сервер, расположенные в дополнительном регионе.

az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
    --restore-mode AlternateWorkloadRestore \
    --from-full-rp-name 293170069256531 \
    --rp-name 293170069256531 \
    --target-server-name targetSQLServer \
    --target-container-name VMAppContainer;compute;SQLResourceGroup;targetSQLServer \
    --target-item-name testdb_restore_1 \
    --target-server-type SQLInstance \
    --workload-type SQLDataBase \
    --target-resource-group SQLResourceGroup \
    --target-vault-name targetVault \
    --backup-management-type AzureWorkload

Ответ содержит объект конфигурации восстановления, который выглядит следующим образом:

 {
  "container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/targetVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;SQLResourceGroup;targetSQLServer",
  "container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
  "database_name": "MSSQLSERVER/sqldatabase;mssqlserver;testdb_restore_1",
  "filepath": null,
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;master",
  "log_point_in_time": null,
  "recovery_mode": null,
  "recovery_point_id": "932606668166874635",
  "restore_mode": "AlternateLocation",
  "source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
  "workload_type": "SQLDataBase",
  "alternate_directory_paths": [],
}

Используйте эту конфигурацию восстановления в команде az restore restore-azurewl. Установите флаг --use-secondary-region, чтобы восстановить базу данных в дополнительном регионе.

az backup restore restore-azurewl --resource-group SQLResourceGroup \
    --vault-name testSQLVault \
    --recovery-config recoveryconfig.json \
    --use-secondary-region \
    --output table

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

Name                                  Operation           Status      Item Name                  Backup Management Type    Start Time UTC                    Duration
------------------------------------  ------------------  ----------  -------------------------  ------------------------  --------------------------------  --------------
0d863259-b0fb-4935-8736-802c6667200b  CrossRegionRestore  InProgress  master [testSQLVM] 		 AzureWorkload             2022-06-21T08:29:24.919138+00:00  0:00:12.372421

Примечание

RPO для данных резервного копирования, доступных в дополнительном регионе, составляет 12 часов. Таким образом, при включении CRR RPO для дополнительного региона составляет 12 часов и длительность частоты регистрации журнала (может составлять не менее 15 минут).

Восстановление в виде файлов

Чтобы восстановить данные резервной копии в виде файлов, а не базы данных, используйте режим восстановления RestoreAsFiles. Для него нужно выбрать точку восстановления, например последнюю из существующих или любую другую. Когда файлы будут скопированы в указанное расположение, их можно будет использовать на любом компьютере SQL, где вы намерены восстановить их в формате базы данных. Так как эти файлы можно переместить на любой компьютер, теперь вы можете восстанавливать данные в разных подписках и регионах.

Для нашего примера выберите последнюю точку восстановления (28-11-2019-09:53:00), а также расположение дампа файлов резервных копий (/home/sql/restoreasfiles) на том же сервере SAP HANA. Эту точку восстановления можно указать в одном из следующих форматов: дд-мм-гггг или дд-мм-гггг-чч:мм:сс. Чтобы выбрать допустимую точку восстановления, используйте команду az backup recoverypoint show-log-chain, которая позволяет получить интервалы полных цепочек резервных копий журналов.

Используя указанные выше имя точки восстановления и режим восстановления, создайте объект конфигурации восстановления, используя команду az backup recoveryconfig show. Проверьте оставшиеся параметры в этой команде:

  • --target-container-name обозначает имя сервера SQL который зарегистрирован в хранилище Служб восстановления и размещается в том же регионе, что и восстанавливаемая база данных. Давайте восстановим базу данных в виде файлов на тот же сервер SQL с именем hxehost, который вы защищали.
  • --rp-name: чтобы выполнить восстановление до точки во времени, укажите имя точки восстановления DefaultRangeRecoveryPoint.
az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
    --restore-mode RestoreAsFiles \
    --rp-name 932606668166874635 \
    --target-container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --filepath /sql/restoreasfiles \
    --output json

В ответ на приведенный выше запрос возвращается примерно такой объект конфигурации восстановления:

{
  "alternate_directory_paths": null,
  "container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupFabrics/Azure/protectionContainers/VMAppContainer;Compute;SQLResourceGroup;testSQLVM",
  "container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
  "database_name": null,
  "filepath": "/sql/restoreasfiles",
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;master",
  "log_point_in_time": null,
  "recovery_mode": "FileRecovery",
  "recovery_point_id": "932606668166874635",
  "restore_mode": "AlternateLocation",
  "source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
  "workload_type": "SQLDataBase"
}

Теперь выполните команду az restore restore-azurewl для восстановления базы данных в виде файлов. Чтобы использовать эту команду, введите приведенный выше код в формате JSON, сохраненный в файл с именем recoveryconfig.json.

az backup restore restore-azurewl --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --restore-config recoveryconfig.json \
    --output json

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

{
  "eTag": null,
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupJobs/e9cd9e73-e3a3-425a-86a9-8dd1c500ff56",
  "location": null,
  "name": "e9cd9e73-e3a3-425a-86a9-8dd1c500ff56",
  "properties": {
    "actionsInfo": [
      "1"
    ],
    "activityId": "9e7c8ee4-f1ef-11ec-8a2c-3c52826c1a9a",
    "backupManagementType": "AzureWorkload",
    "duration": "0:00:04.304322",
    "endTime": null,
    "entityFriendlyName": "master [testSQLVM]",
    "errorDetails": > [!NOTE]
> Information the user should notice even if skimmingnull,
    "extendedInfo": {
      "dynamicErrorMessage": null,
      "propertyBag": {
        "Job Type": "Restore as files"
      },
      "tasksList": [
        {
          "status": "InProgress",
          "taskId": "Transfer data from vault"
        }
      ]
    },
    "isUserTriggered": true,
    "jobType": "AzureWorkloadJob",
    "operation": "Restore",
    "startTime": "2022-06-22T05:53:32.951666+00:00",
    "status": "InProgress",
    "workloadType": "SQLDataBase"
  },
  "resourceGroup": "SQLResourceGroup",
  "tags": null,
  "type": "Microsoft.RecoveryServices/vaults/backupJobs"
}

В ответе будет указано имя задания. Имя задания позволяет отслеживать состояние задания с помощью команды az backup job show.

Примечание

Если вы хотите восстанавливать не всю цепочку, а только подмножество файлов, выполните действия, описанные здесь.

Восстановление между подписками

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

Примечание

  • Вы можете активировать восстановление между подписками из хранилища Служб восстановления.
  • CSR поддерживается только для потокового резервного копирования и не поддерживается для резервного копирования на основе snapshot.
  • Восстановление между регионами (CRR) с CSR не поддерживается.
az backup vault create

Добавьте параметр cross-subscription-restore-state , позволяющий задать состояние CSR хранилища во время создания и обновления хранилища.

az backup recoveryconfig show

Добавьте параметр --target-subscription-id , позволяющий указать целевую подписку в качестве входных данных при активации восстановления между подписками для источников данных SQL или HANA.

Пример:

   az backup vault create -g {rg_name} -n {vault_name} -l {location} --cross-subscription-restore-state Disable
   az backup recoveryconfig show --restore-mode alternateworkloadrestore --backup-management-type azureworkload -r {rp} --target-container-name {target_container} --target-item-name {target_item} --target-resource-group {target_rg} --target-server-name {target_server} --target-server-type SQLInstance --target-subscription-id {target_subscription} --target-vault-name {target_vault} --workload-type SQLDataBase --ids {source_item_id}

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