В этой статье рассматриваются сценарии миграции базы данных 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, а администратору остается выбрать подходящую утилиту или скрипт.
1с в итоге можно туда вывести базу?
Сам с 1С не работаю со всем, но кейсы переезда базы в облако мелькали пару раз.
1c сервер в периметре не цепляет базу, студия ок.
Microsoft SQL Server Native Client 10.0: Server name cannot be determined. It must appear as the first segment of the server’s dns name (servername.database.windows.net). Some libraries do not send the server name, in which case the server name must be included as part of the user name (username@servername). In addition, if both formats are used, the server names must match.
HRESULT=80004005, SQLSrvr: SQLSTATE=HY000, state=1, Severity=14, native=40531, line=0
На отдельный 1с сервер в азуре нет лицензий пока.
Через пользователя [email protected]
Microsoft SQL Server Native Client 10.0: Reason: Login failed due to client TLS version being less than minimal TLS version allowed by the server.
HRESULT=80004005, SQLSrvr: SQLSTATE=HY000, state=1, Severity=14, native=47072, line=0
Ну здесь более ясно проблема видна. Клиент ломится со старой версией TLS. Либо докрутить клиента, либо понизить TLS версию в AzureSQL
Проверили доступность AzureSQL по TCP порту 1433?
Прошло чуть больше года. Актуален вопрос размещения БД 1С в Azure SQL Database . У кого-нибудь получалось ? Какой был опыт ?