Microsoft Sql Server Migration Assistant - средство миграции данных с MySQL на Sql Server

10 апреля 2010 г.

Иногда возникают такие ситуации, когда проект, работающий на 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

Кроме того, для корректной работы с данными в кодировке UTF в SQL Server, необходимо использовать библиотеку FreeTDS вместо стандартной php_mssql.dll. Информацию о ее настройке можно найти здесь.

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

Загружаем с сайта 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

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


Комментарии


Алексей Беляев    (06/04/2011 15:27)

С какова числа статья, !

Хорошо б указывать


Nevlabs.ru - Александр    (06/04/2011 15:39)

Статья от 10 апреля 2010 г.

Спасибо за подсказку, на будущее учтем.


Алексей    (06/04/2011 21:18)

У тебя немного инфы нехватает у меня зацени http://bai.int.ru/perevod-mysql-na-sql/ ...
Щас буду пробовать переезд..


Nevlabs.ru - Александр    (06/04/2011 23:23)

Когда писалась статья, этот инструмент был только в CTP версии. Потом да, добавили функционала, а статью я с тех пор так и не обновил. Хотя с докладом выступал с описанием расширенной версии :)


Написать комментарий

Ваше имя:


Комментарий:

Email:

Необязательно. Вы можете указать email, если хотите получать на него ответы в этой теме. Адрес опубликован не будет.

Защита от роботов: какой сегодня год?