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


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

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

Используйте Azure Cloud Shell для выполнения команд CLI.

В этой статье предполагается, что у вас есть работающая на виртуальной машине Azure база данных SQL, которая резервируется с помощью Azure Backup. Если вы использовали создание резервной копии базы данных SQL в Azure с помощью 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-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 Server, успешно зарегистрированного в хранилище служб восстановления и расположенного в том же регионе, что и база данных, которую необходимо восстановить. Здесь вы восстанавливаете базу данных на том же сервере SQL, который вы защитили, с именем 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-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 .

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

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

В качестве примера давайте выберем предыдущий момент времени "28-11-2019-09:53:00," чтобы восстановить. Эту точку восстановления можно указать в следующих форматах: dd-mm-yy, dd-mm-y-hh:mm:ss. Чтобы выбрать допустимый момент времени для восстановления, используйте команду 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-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-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 на том же сервере SQL Server. Эту точку восстановления можно указать в одном из следующих форматов: dd-mm-yyyy илиdd-mm-y-hh:mm:ss. Чтобы выбрать допустимый момент времени для восстановления, используйте команду az backup recoverypoint show-log-chain , которая перечисляет интервалы резервных копий непрерывной цепочки журналов.

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

  • --target-container-name: имя сервера 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-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 включен во всех хранилищах служб восстановления (существующие и только что созданные хранилища).

Замечание

  • Вы можете активировать восстановление кросс-подписки из хранилища Recovery Services.
  • 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}

Следующий шаг