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

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

Ответ 1

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

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

Вот ссылка

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

Ответ 2

Использовать 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 работает нормально.

Ответ 3

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

mysqldump --compatible=mssql

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

Ответ 4

Вот мой подход для импорта .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.

Ответ 5

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

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

Ответ 6

У меня была очень похожая проблема сегодня - мне нужно было скопировать большую таблицу (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. с твоим.

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

Ответ 9

Бежать:

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