it-roy-ru.com

Как импортировать файл SQL Server .bak в MySQL?

Название говорит само за себя. Есть ли способ напрямую выполнить такой импорт?

56
Marcel

Файлы .BAK с сервера SQL находятся в формате Microsoft Tape Format (MTF) ref: http://www.fpns.net/willy/msbackup.htm

Возможно, файл bak будет содержать файлы LDF и MDF, которые SQL-сервер использует для хранения базы данных.

Вам нужно будет использовать SQL-сервер для их извлечения. SQL Server Express бесплатен и сделает свою работу.

Итак, установите SQL Server Express edition и откройте SQL Server Powershell. Там выполнить sqlcmd -S <COMPUTERNAME>\SQLExpress (пока вы вошли в систему как администратор)

затем выполните следующую команду.

restore filelistonly from disk='c:\temp\mydbName-2009-09-29-v10.bak';
GO

Это перечислит содержимое резервной копии - вам нужны первые поля, которые сообщают вам логические имена - одно будет реальной базой данных, а другое - файлом журнала.

RESTORE DATABASE mydbName FROM disk='c:\temp\mydbName-2009-09-29-v10.bak'
WITH 
   MOVE 'mydbName' TO 'c:\temp\mydbName_data.mdf', 
   MOVE 'mydbName_log' TO 'c:\temp\mydbName_data.ldf';
GO

На данный момент вы извлекли базу данных - затем установите Microsoft Sql Web Data Administrator. вместе с этим инструментом экспорта и у вас будет SQL-скрипт, содержащий базу данных.

62
Richard Harrison

Мне не удалось найти способ сделать это напрямую.

Вместо этого я импортировал файл bak в SQL Server 2008 Express, а затем использовал MySQL Migration Toolkit .

Работал как шарм!

8
Marcel

MySql есть приложение для импорта БД из Microsoft sql . Шаги: 

  1. Откройте MySql Workbench
  2. Нажмите «Миграция базы данных» (если она не появляется, вам нужно установить ее из обновления MySql)
  3. Следуйте списку задач миграции с помощью простого мастера.
7
AutoCiudad
  1. Откройте SQL Server Management Studio на своем локальном компьютере.
  2. Щелкните правой кнопкой мыши папку «Базы данных». Во всплывающем меню выберите «Новая база данных».
  3. Введите имя базы данных и нажмите кнопку «ОК».
  4. Щелкните правой кнопкой мыши значок новой базы данных. Во всплывающем меню выберите «Задачи» -> «Восстановить» -> «База данных».
  5. Выберите опцию «С устройства», а затем нажмите кнопку обзора.
  6. Нажмите Добавить и перейдите к соответствующему файлу. Нажмите Ok.
  7. В окне Восстановить базу данных установите флажок рядом с вашим файлом BAK.
  8. Перейдите на страницу параметров. Установите флажок «Перезаписать существующую базу данных» Нажмите «ОК».
  9. Проверьте содержимое вашей базы данных, которая сейчас активна на вашем локальном компьютере.
2
RollerCosta

Хотя мой опыт работы с MySQL ограничен, я не думаю, что вам повезло. Однако вы должны иметь возможность перенести все ваши данные, восстановив базу данных на сервере MSSQL, а затем создав пакет SSIS или DTS для отправки ваших таблиц и данных на сервер MySQL.

надеюсь это поможет

2
Levi Rosol

Для тех, кто пытается найти решение Ричарда выше, вот некоторая дополнительная информация, которая может помочь в поиске распространенных ошибок:

1) При запуске восстановления списка файлов только вы можете получить ошибку операционной системы 5 (доступ запрещен). Если это так, откройте диспетчер конфигурации SQL Server и измените имя входа для SQLEXPRESS на пользователя с правами локальной записи.

2) @ «Это перечислит содержимое резервной копии - то, что вам нужно, это первые поля, которые сообщают вам логические имена» - если в вашем файле указано более двух заголовков, вам также необходимо будет указать, что делать с этими файлами в команда RESTORE DATABASE. Если вы не укажете, что делать с файлами за пределами базы данных и журнала, система, очевидно, попытается использовать атрибуты, перечисленные в файле .bak. Восстановление файла из чужой среды приведет к тому, что «путь имеет недопустимые атрибуты. Это должен быть каталог »(так как рассматриваемый путь не существует на вашем компьютере)…. Простое предоставление оператора MOVE решает эту проблему. 

В моем случае был третий тип файла FTData. Команда MOVE, которую я добавил:

MOVE 'mydbName_log' TO 'c:\temp\mydbName_data.ldf',
MOVE 'sysft_...' TO 'c:\temp\other';

в моем случае мне фактически пришлось создать новый каталог для третьего файла. Первоначально я пытался отправить его в ту же папку, что и файл .mdf, но при третьем файле FTData при попытке восстановления возникла ошибка «не удалось правильно инициализировать».

0
Andrew

Метод, который я использовал, включал часть метода Ричарда Харрисона:

Итак, установите SQL Server 2008 Express издание,

Для этого требуется загрузить установщик веб-платформы "wpilauncher_n.exe" После того, как он установлен, нажмите на выбор базы данных (вам также необходимо загрузить Frameworks и Runtime)

После установки перейдите к командной строке Windows и:

используйте sqlcmd -S\SQLExpress (пока вошел в систему как администратор)

затем выполните следующую команду.

восстановить файл только из диск = 'C:\Temp\mydbName-2009-09-29-v10.bak'; GO Это перечислит содержимое резервное копирование - то, что вам нужно, это первое поля, которые сообщают вам логические имена - одна будет реальной базой данных, а другая - файлом журнала.

ВОССТАНОВИТЬ БАЗУ ДАННЫХ mydbName ОТ disk = 'c:\temp\mydbName-2009-09-29-v10.bak' С ПЕРЕМЕЩЕНИЕМ 'mydbName' TO 'c:\temp\mydbName_data.mdf', MOVE 'mydbName_log' TO 'C:\Temp\mydbName_data.ldf'; ИДТИ

Я запустил установщик веб-платформы и на новой вкладке установил SQL Server Management Studio и просмотрел базу данных, чтобы убедиться в наличии данных ...

В тот момент я попробовал инструмент, включенный в MSSQL «Мастер импорта и экспорта SQL», но результат дампа csv включал только имена столбцов ...

Поэтому вместо этого я просто экспортировал результаты запросов типа «выбрать * из пользователей» из SQL Server Management Studio.

0
Traveling_Monk

Я очень сомневаюсь в этом. Возможно, вы захотите использовать DTS/SSIS, чтобы сделать это, как говорит Леви. Можно подумать, что вам может понадобиться запустить процесс без фактического импорта данных. Просто сделайте достаточно, чтобы собрать основные структуры таблиц. Затем вы захотите изменить структуру получаемой таблицы, потому что любая структура, которая будет создана, вероятно, будет в лучшем случае шаткой.

Возможно, вам также придется продвинуться дальше и создать промежуточную область, которая сначала принимает все данные в виде строки (varchar). Затем вы можете создать сценарий, который выполняет проверку и преобразование, чтобы поместить его в «настоящую» базу данных, потому что две базы данных не всегда хорошо работают вместе, особенно при работе с датами.

0
Charles Graham

Базы данных SQL Server являются собственностью Microsoft. Я могу придумать два варианта:

  1. Создайте базу данных в CSV, XML или аналогичном формате, который затем загрузите в MySQL.

  2. Установите ODBC соединение с MySQL, а затем с помощью DTS перенесите данные. Как предположил Чарльз Грэм, вам может понадобиться построить столы, прежде чем делать это. Но это так же просто, как вырезать и вставить из окон SQL Enterprise Manager в соответствующее окно MySQL.

0
CyberFonic

Файл .bak из SQL Server является специфическим для этого диалекта базы данных и не совместим с MySQL.

Попробуйте использовать etlalchemy для переноса вашей базы данных SQL Server в MySQL. Это инструмент с открытым исходным кодом, который я создал для облегчения миграции между различными СУБД. 

Быстрая установка и примеры приведены здесь на странице github , а более подробное объяснение происхождения проекта можно найти здесь .

0
The Aelfinn