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:
В конфигурационном файле видно, что работа осуществляется с базой данных forum2 (параметр $dbname):
Зайдя через MySql Query Brower в структуру базы данных forum2, можно увидеть список таблиц:
Подготовка к переносу
Предположим, что мы хотим перенести базу данных форума на SQL Server 2008 Express. Создадим логическую базу данных forum, а так же учетную запись forum, под которой движок форума будет подключаться к БД:
Перенос структуры базы данных
Загружаем с сайта Microsoft саму утилиту (версия для SQL Server 2008, версия для SQL Server 2005). Утилита бесплатна, но для ее активации нужно получить лицензионный код – сделать это можно через учетную запись Live ID.
Запускаем программу:
Слева от основной рабочей области видно два окна: просмотр метаданных у MySQL-сервера и у SQL Server. С ними мы будем активно работать.
Сверху над ними находятся кнопки подключения к серверам баз данных.
Для начала создаем новый проект:
Затем подключаемся к MySQL:
Далее подключаемся к SQL Server:
После подключения заполняются окна с метаданными обоих серверов:
Можно видеть базу данных forum2 в MySQL, которую мы будем переносить, и базу данных forum в SQL Server, в которую будут записаны данные.
Отмечаем галочкой базу данных, которую хотим перенести:
В основной рабочей области показывается главная вкладка: Schema Mapping. В ней показан план переноса – откуда и куда он будет выполнен.
Стоит отметить одну особенность: при работе с программой считается, что в понятие "схема" применительно к MySql входит название базы данных, а применительно к SQL Server – название базы данных и конкретная схема в ней (по умолчанию используется схема dbo).
Изначально утилита предлагает перенос в базу данных с таким же именем, как и исходная (forum2). Но, поскольку перенос будет осуществляться в базу данных с именем forum, а не forum2, нажимаем кнопку Modify и корректируем схему назначения:
Кроме того, перейдя на вкладку Type Mapping можно посмотреть (и скорректировать) соответствие типов данных при переносе:
После этого можно приступать к конвертации. Кликнув правой кнопкой на объекте переноса (базе данных forum2), выбираем Convert Schema:
Программа приступает к конвертации:
После завершения операции выводится отчет в стандартном стиле сред разработки:
На данный момент сами таблицы физически еще не созданы – подготовлен лишь скрипт, который их создаст. Кликнув правой кнопкой по объекту переноса и выбрав Create Report, можно получить небольшой отчет:
Кроме того, можно сохранить и SQL-скрипт создания таблиц, выбрав пункт Save as Script все по тому же правому клику на переносимом объекте. Результат сохраняется в виде SQL-файла:
Как было сказано ранее, Convert Schema физически не проводит операцию создания таблиц в базе назначения. Чтобы выполнить физическое создание, кликнем по конечной базе данных правой кнопкой мыши и выберем Synchronize with Database. Эта операция выполнит сравнение структуры таблиц, находящихся в базе данных со структурой, созданной нами при конвертации, и создаст недостающие объекты.
Кликнув на указанный пункт меню, получаем следующее диалоговое окно:
Синяя стрелка здесь обозначает, что будет выполнена операция отображения локальной структуры (то, что мы получили в результате конвертации) на базу данных назначения. Возможны и другие варианты – например, в случае, если часть таблиц уже существует. Расшифровку всех операций синхронизации можно получить, кликнув на кнопку с красно-зелено-синей полоской.
Нажав ОК, запускаем процесс создания таблиц:
Открыв базу данных forum в SQL Management Studio, убедимся, что таблицы появились:
Перенос данных
После того, как структура таблиц была перенесена, можно выполнить и перенос данных в таблицах.
Для этого выбираем исходный объект (в нашем случае – базу данных), кликаем по нему правой кнопкой и используем пункт Migrate Data:
Для выполнения этой операции утилита должна заново выполнить подключение к базам данных. Соответствующие диалоги выводятся автоматически. Подключаемся к MySQL:
Подключаемся к SQL Server:
После этого утилита выполнит процедуру переноса данных автоматически. По завершению выводится отчет:
Используя SQL Management Studio, убедимся в том, что данные перенеслись:
Перевод форума на использование SQL Server Express
После того, как мы перенесли все таблицы и данные, осталось только внести правки в форум. Поскольку в нашем случае используется PhpBB 3, умеющий работать с SQL Server-ом, достаточно лишь поменять соответствующие строчки в конфигурационном файле:
К сожалению, во многих других случаях придется вносить изменения в программный код. Так, например, для ограничения числа возвращенных записей в MySQL используется оператор LIMIT, а в SQL Server – TOP. Попытка выполнения запроса вида SELECT * FROM MyTable LIMIT 10, 40 в SQL Server вызовет ошибку.
После изменения конфигурационного файла проверим работоспособность форума:
Как видно, все данные полностью сохранились и корректно отображаются. На этом процесс переноса данных завершен.
Оригинал статьи опубликован на сайте www.nevlabs.ru.