Восстановление баз данных 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 поддерживается только для резервного копирования на основе потоковой передачи и не поддерживается для резервного копирования на основе моментальных снимков.
- Межрегиональная восстановление (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}