Импорт базы данных MySQL в MS SQL Server

78

У меня есть файл .sql из дампа MySQL, содержащий таблицы, определения и данные, которые необходимо вставить в эти таблицы. Как преобразовать эту базу данных, представленную в файле дампа, в базу данных MS SQL Server?

  • 1
    У вас есть доступ к исходной базе данных? Или файл экспорта в основном все, что у вас есть?
  • 0
    У меня тоже есть доступ к оригинальной БД. Я просто подумал, что использовать дамп может быть проще
Теги:
sql-server
mysqldump

9 ответов

13
Лучший ответ

Я нашел способ для этого в сети

Это требует немного работы, потому что это нужно делать за столом. Но в любом случае я мог бы скопировать таблицы, данные и ограничения в базу данных MS SQL.

Вот ссылка

http://www.codeproject.com/KB/database/migrate-mysql-to-mssql.aspx

  • 1
    Это когда Mysql и SQL находятся на одной машине или они связаны через сеть. Это не полезно, когда существуют две разные машины, и у вас есть файл дампа из mysql. право?
56

Использовать SQL Server Migration Assistant (SSMA)

В дополнение к MySQL он поддерживает Oracle, Sybase и MS Access.

Кажется, он достаточно умен и способен справляться даже с нетривиальными переносами. Он также получил некоторый интерфейс командной строки (в дополнение к GUI), поэтому теоретически он может быть интегрирован в некоторый процесс пакетной загрузки.

Это текущая ссылка для загрузки версии MySQL https://www.microsoft.com/en-us/download/details.aspx?id=54257.

Текущая (июнь 2016 г.) стабильная версия 6.0.1 аварийно завершает работу с текущим (5.3.6) драйвером ODBC MySQL при передаче данных. Все 64 бит. Версия 5.3 с драйвером ODBC 5.1.13 работает нормально.

  • 6
    Этот инструмент работает только в том случае, если вы можете установить коннектор ODBC со своего ПК на базу данных MySQL. Если у вас есть только файл дампа .sql, вы не можете использовать SSMA.
  • 10
    Движок MySQL является свободным программным обеспечением, и есть версия для Windows. Установка и загрузка дампа - тривиальная работа. Если вы надеетесь найти инструмент (даже коммерческий, не говоря уже о бесплатном), который надежно преобразует произвольный скрипт MySQL в его эквивалент SQL Server - что ж, удачи в этом.
Показать ещё 12 комментариев
15

Я предлагаю вам использовать mysqldump так:

mysqldump --compatible=mssql

phpMyAdmin по-прежнему является веб-приложением и потенциально может иметь некоторые ограничения для больших баз данных (script время выполнения, распределяемая память и так далее).

  • 4
    @deklin, это не сработало для MS SQL 2008.
  • 5
    Увы, это доставляет мне много проблем с совместимостью. Сценарий будет содержать обратные пометки вокруг имен столбцов, типы данных, которые не существуют в MSSQL, будут нарушать ограничение max-1000-insertts, ключевые слова auto_increment и т. Д. И т. Д. Этот ответ является логическим предложением, но, боюсь, это не так. не работает слишком хорошо (по крайней мере, это не для меня).
7

Вот мой подход для импорта .sql файлов в MS SQL:

  • Экспортировать таблицу из MySQL с параметрами --compatible=mssql и --extended-insert=FALSE:

    mysqldump -u [username] -p --compatible=mssql --extended-insert=FALSE db_name table_name > table_backup.sql

  • Разделите экспортированный файл с помощью PowerShell на 300000 строк в файле:

    $i=0; Get-Content exported.sql -ReadCount 300000 | %{$i++; $_ | Out-File out_$i.sql}

  • Запуск каждого файла в Microsoft SQL Server Management Studio

Несколько советов как ускорить вставку.

Другой подход заключается в использовании опции mysqldump –where. Используя эту опцию, вы можете разделить таблицу на любое условие, которое поддерживается предложением where sql.

  • 0
    как мы можем экспортировать всю базу данных вместо таблицы за таблицей
  • 0
    Попробуйте ключевое слово --databases [db_name] как описано в этом ответе: stackoverflow.com/a/26096339/155687
5

Если вы выполняете экспорт с помощью PhpMyAdmin, вы можете переключить режим совместимости SQL в "MSSQL". Таким образом, вы просто запускаете экспортированный скрипт для своей базы данных MS SQL, и все готово.

Если вы не можете или не хотите использовать PhpMyAdmin, в mysqldump также есть опция совместимости, но лично я бы предпочел, чтобы PhpMyAdmin сделал это для меня.

  • 4
    @marga Marga, это не сработало для MS SQL 2008.
  • 1
    Этот ответ работал для меня, с минимальными изменениями в сгенерированном скрипте. Перенес его в SQL Server 2012. До этого не видел режим совместимости.
3

У меня была очень похожая проблема сегодня - мне нужно было скопировать большую таблицу (5 миллионов строк) из MySql в MS SQL.

Вот шаги, которые я сделал (под Ubuntu Linux):

mysqldump \
    --compact \
    --complete-insert \
    --no-create-info \
    --compatible=mssql \
    --extended-insert=FALSE \
    --host "$MYSQL_HOST" \
    --user "$MYSQL_USER" \
    -p"$MYSQL_PASS" \
    "$MYSQL_DB" \
    "$TABLE" > "$FILENAME"
  1. В моем случае файл дампа был довольно большим, поэтому я решил разбить его на несколько небольших фрагментов (по 1000 строк каждый) - split --lines=1000 "$FILENAME" part-

  2. Наконец, я повторил эти маленькие файлы, сделал некоторые замены текста и выполнил части по одному на сервере MS SQL:

export SQLCMD=/opt/mssql-tools/bin/sqlcmd

x=0

for file in part-*
do
  echo "Exporting file [$file] into MS SQL. $x thousand(s) processed"

  # replaces \' with ''
  sed -i "s/\\\'/''/g" "$file"

  # removes all "
  sed -i 's/"//g' "$file"

  # allows to insert records with specified PK(id)
  sed -i "1s/^/SET IDENTITY_INSERT $TABLE ON;\n/" "$file"

  "$SQLCMD" -S "$AZURE_SERVER" -d "$AZURE_DB" -U "$AZURE_USER" -P "$AZURE_PASS" -i "$file"
  echo ""
  echo ""

  x=$((x+1))
done

echo "Done"

Конечно, вам нужно будет заменить мои переменные типа $AZURE_SERVER, $TABLE, e.t.c. с твоим.

Надеюсь, что это поможет.

0

Бежать:

mysqldump -u root -p your_target_DB --compatible=mssql > MSSQL_Compatible_Data.sql

Хотите увидеть панель процесса?

pv mysqldump -u root -p your_target_DB --compatible=mssql > MSSQL_Compatible_Data.sql
0

Также вы можете использовать "ODBC" + "Мастер импорта и экспорта SQL Server". Ниже ссылка описывает это: https://www.mssqltips.com/sqlservertutorial/2205/mysql-to-sql-server-data-migration/

Изображение 106411

0

У этого парня есть простой трюк с использованием MS Access в качестве туннеля между MySQL и MSSQL

Вы можете прочитать сообщение в http://azamudd.in/convert-data-from-mysql-into-mssql-the-easy-way-via-ms-access/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню