В этой статье рассматриваются сценарии миграции базы данных SQL Server из локальной (on-premises) инфраструктуры в облачную базу Azure SQL.
Использование SQL Azure по модели PaS позволяет вам получить собственный облачный инстанс SQL без развёртывания виртуальных серверов в облаке.
Чем полезен SQL Azure?
- Облачную базу данных можно использовать без изменения приложения и сохраняя локальную инфраструктуру в том виде, в котором она была до миграции
- Простота масштабирования и высокая скорость доступа к данным в разных регионах/континентах
- Простое и быстрое восстановление, наличие снапшотов (особо важно для разработчиков)
- Оптимален для стартов, позволяет получить все возможности SQL, которые доступны большим проектам по доступной цене.
Создаем базу данных SQL Azure
Перед тем, как разворачивать базу данных в облаке, необходимо создать сервер базы данных в Microsoft Azure.
Для этого нужно выполнить следующие действия:
- Перейти на портал Azure;
- В строке поиска введите «sql servers», выберите SQL servers;
- Если в вашей подписке нет серверов SQL, то нажмите Create SQL server;
- На экране появится форма создания SQL-сервера. На этой форме необходимо заполнить все поля, отмеченные знаками *. Если вы еще не создали группу ресурсов для SQL-сервера, на этом шаге вы можете это сделать, нажав на кнопку Create new;
- Следующим шагом будет настройка сетевого подключения к облачному SQL серверу. Разрешим создание правила брандмауэра для доступа к SQL серверу из Интернет;
- На следующем шаге есть возможность подключить к серверу услугу Azure Defender для SQL — это пакет для защиты SQL сервера. Более подробно о возможностях Azure Defender можно посмотреть на странице документации Microsoft;
- Следующим шагом можно заполнить теги для нового сервера. Теги пригодятся, если нужно будет искать наш сервер в скриптах;
- Подтверждаем создание SQL-сервера нажатием кнопки Create. После нажатия кнопки «Create» будет создана ресурсная группа для нашего сервера и сам сервер SQL;
- Переходим в раздел «Firewalls and virtual networks», нажав на ссылку «Show firewall settings»;
- Нажимаем на «Add client IP», в поле «Client IP address» появляется текущее подключение к облачному Azure SQL.
- Обязательно нажимаем кнопку Save
Создать облачный SQL сервер можно и при помощи PowerShell. Перед использованием PowerShell сначала нужно установить несколько модулей.
Сначала загружаем модуль Az при помощи команды
Install-Module -Name Az -AllowClobber
Затем загружаем модуль Az.Resources командой
Import-Module Az.Resources
И аутентифицируемся в Microsoft Azure:
Connect-AzAccount
Первым шагом мы создаем ресурсную группу Azure с именем ResourceGroup1:
AzureResourceGroup -Name "ResourceGroup1" -Location "NorthEurope"
Следующий шаг — создание сервера и настройка брандмауэра. В скрипте указываем созданную ресурсную группу, месторасположение, логин и пароль администратора, а также задаем параметр брандмауэра, позволяющий подключаться к серверу из Интернет.
Write-host "Creating primary server..."
$resourcegroupname = "ResourceGroup1"
$location = "NorthEurope"
$adminlogin = "sqladmin"
$password = "Azure1345678!"
$servername = "mysqlserver-1558185950"
$startIp = "0.0.0.0"
$endIp = "0.0.0.0"
Write-host "Creating primary server..."
$server = New-AzSqlServer -ResourceGroupName $resourceGroupName -ServerName $serverName -Location $location -SqlAdministratorCredentials $(New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $adminLogin, $(ConvertTo-SecureString -String $password -AsPlainText -Force))
$server
Write-host "Configuring server firewall rule..."
echo $resourcegroupname
$serverFirewallRule = New-AzSqlServerFirewallRule -ResourceGroupName $resourcegroupname -ServerName $servername -FirewallRuleName "AllowedIPs" -StartIpAddress $startIp -EndIpAddress $endIp
$serverFirewallRule
После создания ресурсной группы и сервера SQL можно переходить к миграции.
Миграция в SQL Azure с помощью SQL Server Management Studio
Наиболее простой способ миграции базы данных на on-prem SQL Server в Azure SQL– это использование средств SQL Management Studio.
- В SQL Server Management Studio выбираем базу данных, которую мы хотим перенести в облако, затем в контекстном меню выбираем «Deploy Database to Microsoft Azure SQL Database«. Откроется мастер миграции;
- Подключимся к SQL Azure. Для подключения к Azure SQL используем строку «Server name», которую можно скопировать со страницы ресурса нашей базы данных. Выбираем тип аутентификации «SQL Server Authentication», и указываем логин и пароль администратора, которые мы указали при создании сервера баз данных.
- На следующей странице мастера укажите название базы данных, которая будет создана в SQL Azure, уровень службы, объем базы данных и уровень обслуживания.
- Мастер выполнит все необходимые шаги для миграции
- В SQL Azure появится новая база данных.
Перенос базы данных в облако закончен.
Миграция в SQL Azure через пакет приложений уровня данных (Data-tier Application DAC Package)
Приложение уровня данных (Data-tier Application DAC Package) это инструмент управления жизненным циклом базы данных. Разработчики создают базу данных в проекте базы данных SQL Server Data Tool, а затем передают пакет DAC администратору баз данных. Администраторы баз данных разворачивают приложение DAC на тестовый или продуктивный экземпляр SQL Server или используют пакет DAC для обновления ранее развернуой базы данных. В случае изменений в приложении, которые ведут к изменению схемы базы данных, администраторы также могут извлечь базу данных в пакет DAС и передать этот пакет разработчикам.
Если в жизненный цикл базы данных входит миграция в облако Azure, можно воспользоваться следующей инструкцией.
- Убедитесь, что у вас установлена последняя версия SQL Server Management Studio.
- Откройте SQL Server Management Studio и выберите базу данных, которую нужно перенести.
- Из контекстного меню в обозревателе объектов выберите пункт Tasks и нажмите на Export Data-tier Application.
- Нажимаем Next для пропуска настроек по умолчанию.
- Проверим базу данных на совместимость. Для этого щелкнем вкладку Advanced и снимем флаг Select All.
- На странице Export Settings выберем параметр Save to Microsoft Azure, чтобы сохранить файл BACKUP в хранилище BLOB-объектов Azure.
- Перейдем на портал Azure, чтобы получить сведения об учетной записи хранилища.
- Выберите учетную запись хранилища и скопируйте ключ доступа. Вставьте ключ в SQL Server Management Studio и нажмите Connect.
- Теперь мы получили доступ х хранилищу BLOB-объектов Azure.
- Выберите вкладку Advanced. Здесь можно выбрать объекты, которые мы будем проверять на совместимость. После нажатия кнопок Next и Finish мастер экспорта выполнит проверку совместимости базы данных. Если будут найдены какие-то проблемы, они появятся после проверки схемы.
- Если ошибок нет, база данных совместима и готова к миграции. Если появились ошибки, их необходимо исправить прежде чем продолжать процесс миграции.
- В мастере экспорта выберите сохранение файла BACKPAC на локальный диск и нажмите Next.
- Теперь, когда у нас есть файл BACPAC, мы можем выполнить его импорт. Подключитесь к порталу Azure и откройте страницу базы данных SQL. Перейдите в ресурсную группу и создайте новый экземпляр базы данных Azure.
- Выберите Import database на панели инструментов.
- Найдите учетную запись хранилища BLOB-объектов и выберите соответствующий контейнер для файла BACPAC.
- Введите имя новой базы данных, выберите подписку и размер хранилища и введите учетные данные администратора SQL.
- Нажмите ОК, Azure начнет импорт файла BACPAC в новую базу данных.
Microsoft рекомендует этот способ, если размер базы данных не превышает 150 Гб.
Импорт базы данных в SQL Azure с помощью утилиты SqlPackage
Если у вас большая база данных, и ее размер превышает 150 Гб, то Microsoft рекомендует использовать утилиту
SqlPackage
.
sqlpackage.exe /a:import /tcs:"Data Source=<serverName>.database.windows.net;Initial Catalog=<migratedDatabase>;User Id=<userId>;Password=<password>" /sf:AdventureWorks2016.bacpac /p:DatabaseEdition=Free /p:DatabaseServiceObjective=S0
Эта команда импортирует базу данных AdventureWorks2016 в Azure SQL с именем myMigrateDatabase с уровнем служб Free и уровнем обслуживания S0.
Миграция в SQL Azure с помощью PowerShell
Для миграции базы данных в SQL Azure можно использовать командлет
New-AzSqlDatabaseImport
. Перед использованием этого командлета необходимо сохранить bacpac-файл в хранилище azure.
Пример команда импорта:
New-AzSqlDatabaseImport -ResourceGroupName "RG01" -ServerName "Server01" -DatabaseName "Database01" -StorageKeyType "StorageAccessKey" -StorageKey "StorageKey01" -StorageUri "http://account01.blob.core.contoso.net/bacpacs/database01.bacpac" -AdministratorLogin "User" -AdministratorLoginPassword $SecureString -Edition Standard -ServiceObjectiveName S0 -DatabaseMaxSizeBytes 5000000
Параметры командлета:
- AdministratorLoginPassword – секрет для доступа к базе данных
- ResourceGroupName – имя ресурсной группы
- ServerName – имя сервера
- StorageKey – секретная строка
- StorageKeyType – тип ключа доступа, может быть StorageAccessKey или SharedAccessKey.
- StorageUri – URI для bacpac-файла
- ServiceObjectiveName — уровень обслуживания
- DatabaseMaxSizeBytes – максимальный объем базы данных
Увидеть процесс миграции поможет командлет
Get-AzSqlDatabaseImportExportStatus
. Командлет возвращает статус операции: InProgress или Succeeded.
Отменить операцию можно при помощи командлета
Stop-AzSqlDatabaseActivity
. Пример использования в скрипте:
function Cancel-AzSQLImportExportOperation
{
param
(
[parameter(Mandatory=$true)][string]$ResourceGroupName
,[parameter(Mandatory=$true)][string]$ServerName
,[parameter(Mandatory=$true)][string]$DatabaseName
)
$Operation = Get-AzSqlDatabaseActivity -ResourceGroupName $ResourceGroupName -ServerName $ServerName -DatabaseName $DatabaseName | Where-Object {($_.Operation -eq "ExportDatabase" -or $_.Operation -eq "ImportDatabase") -and $_.State -eq "InProgress"}
if(-not [string]::IsNullOrEmpty($Operation))
{
do
{
Write-Host -ForegroundColor Cyan ("Operation " + $Operation.Operation + "with OperationID: " + $Operation.OperationId + " is now " + $Operation.State)
$UserInput = Read-Host -Prompt "Should I cancel this operation? (Y/N)"
} while($UserInput -ne "Y" -and $UserInput -ne "N")
if($UserInput -eq "Y")
{
"Canceling operation"
Stop-AzSqlDatabaseActivity -ResourceGroupName $ResourceGroupName -ServerName $ServerName -DatabaseName $DatabaseName -OperationId $Operation.OperationId
}
else
{"Exiting without canceling the operation"}
}
else
{
"No import or export operation is now running"
}
}
Пример вызова скрипта, который останавливает миграцию базы данных, выполненную предыдущего командлета:
Cancel-AzSQLImportExportOperation -ResourceGroupName RG01 –ServerName Server01 -DatabaseName Database01
После миграции базы данных необходимо обеспечить безопасность базы данных. Защита баз данных SQL Azure включает в себя следующие операции:
- ограничение доступа с помощью правил брандмауэра;
- настройка администратора Azure Active Directory (Azure AD);
- управление доступом пользователей с помощью аутентификации SQL или Azure AD и безопасных строк подключения;
- включение таких функций, как аудит, маскирование данных и шифрование.
Наша следующая статья будет посвящена безопасности в SQL Azure.
Как мы видим, утилиты и другие возможности предоставляют большой выбор инструментов для миграции ваших данных в Microsoft Azure, а администратору остается выбрать подходящую утилиту или скрипт.