Microsoft Sql Server Migration Assistant for MySQL – средство для легкого переезда с MySQL на Sql Server

Александр Неволин , к.т.н., генеральный директор NevLabs

Иногда возникают такие ситуации, когда проект, работающий на MySQL, разрастается настолько, что возникает необходимость перехода на более серьезные сервера баз данных. Ранее разработчики в таких ситуациях писали утилиты по переносу данных самостоятельно. При этом возникали различные проблемы – нужно было находить ближайшие соответствия типов данных, ключей, индексов и т.п.

Microsoft выпустила утилиту, которая позволяет практически полностью автоматизировать перенос данных с MySQL на SQL Server. Поддерживаются SQL Server 2005, 2008 и SQL Azure.

Программа автоматически конвертирует типы данных в ближайшие совместимые, а также переносит ключи и индексы.

Рассмотрим ее работу на примере реального веб-приложения – форума PhpBB 3.

Исходные данные

Имеется форум PhpBB 3, который настроен на IIS7 и работает с MySql 5.1:

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

В конфигурационном файле видно, что работа осуществляется с базой данных forum2 (параметр $dbname):

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

Зайдя через MySql Query Brower в структуру базы данных forum2, можно увидеть список таблиц:

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

Подготовка к переносу

Предположим, что мы хотим перенести базу данных форума на SQL Server 2008 Express. Создадим логическую базу данных forum, а так же учетную запись forum, под которой движок форума будет подключаться к БД:

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

Перенос структуры базы данных

Загружаем с сайта Microsoft саму утилиту (версия для SQL Server 2008, версия для SQL Server 2005). Утилита бесплатна, но для ее активации нужно получить лицензионный код – сделать это можно через учетную запись Live ID.

Запускаем программу:

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

Слева от основной рабочей области видно два окна: просмотр метаданных у MySQL-сервера и у SQL Server. С ними мы будем активно работать.

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

Для начала создаем новый проект:

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

Затем подключаемся к MySQL:

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

Далее подключаемся к SQL Server:

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

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

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

Можно видеть базу данных forum2 в MySQL, которую мы будем переносить, и базу данных forum в SQL Server, в которую будут записаны данные.

Отмечаем галочкой базу данных, которую хотим перенести:

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

В основной рабочей области показывается главная вкладка: Schema Mapping. В ней показан план переноса – откуда и куда он будет выполнен.

Стоит отметить одну особенность: при работе с программой считается, что в понятие "схема" применительно к MySql входит название базы данных, а применительно к SQL Server – название базы данных и конкретная схема в ней (по умолчанию используется схема dbo).

Изначально утилита предлагает перенос в базу данных с таким же именем, как и исходная (forum2). Но, поскольку перенос будет осуществляться в базу данных с именем forum, а не forum2, нажимаем кнопку Modify и корректируем схему назначения:

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

Кроме того, перейдя на вкладку Type Mapping можно посмотреть (и скорректировать) соответствие типов данных при переносе:

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

После этого можно приступать к конвертации. Кликнув правой кнопкой на объекте переноса (базе данных forum2), выбираем Convert Schema:

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

Программа приступает к конвертации:

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

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

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

На данный момент сами таблицы физически еще не созданы – подготовлен лишь скрипт, который их создаст. Кликнув правой кнопкой по объекту переноса и выбрав Create Report, можно получить небольшой отчет:

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

Кроме того, можно сохранить и SQL-скрипт создания таблиц, выбрав пункт Save as Script все по тому же правому клику на переносимом объекте. Результат сохраняется в виде SQL-файла:

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

Как было сказано ранее, Convert Schema физически не проводит операцию создания таблиц в базе назначения. Чтобы выполнить физическое создание, кликнем по конечной базе данных правой кнопкой мыши и выберем Synchronize with Database. Эта операция выполнит сравнение структуры таблиц, находящихся в базе данных со структурой, созданной нами при конвертации, и создаст недостающие объекты.

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

Кликнув на указанный пункт меню, получаем следующее диалоговое окно:

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

Синяя стрелка здесь обозначает, что будет выполнена операция отображения локальной структуры (то, что мы получили в результате конвертации) на базу данных назначения. Возможны и другие варианты – например, в случае, если часть таблиц уже существует. Расшифровку всех операций синхронизации можно получить, кликнув на кнопку с красно-зелено-синей полоской.

Нажав ОК, запускаем процесс создания таблиц:

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

Открыв базу данных forum в SQL Management Studio, убедимся, что таблицы появились:

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

Перенос данных

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

Для этого выбираем исходный объект (в нашем случае – базу данных), кликаем по нему правой кнопкой и используем пункт Migrate Data:

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

Для выполнения этой операции утилита должна заново выполнить подключение к базам данных. Соответствующие диалоги выводятся автоматически. Подключаемся к MySQL:

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

Подключаемся к SQL Server:

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

После этого утилита выполнит процедуру переноса данных автоматически. По завершению выводится отчет:

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

Используя SQL Management Studio, убедимся в том, что данные перенеслись:

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

Перевод форума на использование SQL Server Express

После того, как мы перенесли все таблицы и данные, осталось только внести правки в форум. Поскольку в нашем случае используется PhpBB 3, умеющий работать с SQL Server-ом, достаточно лишь поменять соответствующие строчки в конфигурационном файле:

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

К сожалению, во многих других случаях придется вносить изменения в программный код. Так, например, для ограничения числа возвращенных записей в MySQL используется оператор LIMIT, а в SQL Server – TOP. Попытка выполнения запроса вида SELECT * FROM MyTable LIMIT 10, 40 в SQL Server вызовет ошибку.

После изменения конфигурационного файла проверим работоспособность форума:

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

Как видно, все данные полностью сохранились и корректно отображаются. На этом процесс переноса данных завершен.

Оригинал статьи опубликован на сайте www.nevlabs.ru.