Імпортуйте базу даних MySQL у MS SQL Server


92

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


1
Ви також маєте доступ до вихідної бази даних? Або файл експорту в основному все, що у вас є?
Whakkee

У мене також є доступ до вихідної БД. Я просто подумав, що скористатися звалищем може бути простіше
marionmaiden

Відповіді:


62

Використовуйте помічник міграції SQL Server (SSMA)

На додаток до MySQL він підтримує Oracle, Sybase та MS Access.

Здається, це досить розумно і здатне обробляти навіть нетривіальні перекази. Він також отримав певний інтерфейс командного рядка (на додаток до графічного інтерфейсу), тому теоретично його можна інтегрувати в деякий процес пакетного завантаження.

Це поточне посилання для завантаження версії MySQL https://www.microsoft.com/en-us/download/details.aspx?id=54257

Поточна (червень 2016) стабільна версія 6.0.1 аварійно завершує роботу з поточним (5.3.6) драйвером MySQL ODBC під час передачі даних. Все 64 біт. Версія 5.3 з драйвером ODBC 5.1.13 працює нормально.


9
Цей інструмент працює лише в тому випадку, якщо ви можете встановити з’єднувач ODBC зі свого ПК у свою БД MySQL. Якщо у вас просто є файл дампа .sql, ви не можете використовувати SSMA.
Jake Munson

10
Двигун MySQL - це безкоштовне програмне забезпечення, а також є версія для Windows. Встановити його та завантажити дамп - справа тривіальна. Якщо ви сподіваєтесь знайти інструмент (навіть комерційний, не кажучи вже про безкоштовний), який надійно перетворить довільний скрипт MySQL на еквівалент SQL Server - ну, удачі вам у цьому.
Zar Shardan

1
Гарна думка. І цим я вчора закінчив робити. Якщо не писати власну утиліту для перетворення, то встановлення MySQL здається найкращим варіантом. SSMA було дуже важко використовувати, але врешті-решт я змусив його працювати.
Jake Munson

2
SSMA - чудовий варіант, це має бути прийнятою відповіддю. Мені взагалі не було важко користуватися.
DonBecker

2
Для цього потрібен агент SQL Server, який не постачається з SQL Server Express.
Vinicius Rocha

18

Я пропоную вам використовувати mysqldump так:

mysqldump --compatible=mssql

phpMyAdmin все ще є веб-програмою і потенційно може мати певні обмеження для великих баз даних (час виконання сценарію, виділена пам'ять тощо).


6
На жаль, це викликає у мене всілякі проблеми із сумісністю. Сценарій буде містити зворотні позначки навколо назв стовпців, типів даних, які не існують у MSSQL, порушить обмеження max-1000-вставок, ключові слова auto_increment тощо. Ця відповідь є логічною пропозицією, але я боюся, що не не працюю занадто добре (принаймні: це не для мене).
Jeroen

mysqldump --compatible = ansi "Вивести вихід, який є більш сумісним з іншими системами баз даних або зі старими серверами MySQL. Єдиним дозволеним значенням для цієї опції є ansi, що має те саме значення, що і відповідна опція для встановлення режиму SQL сервера."
Томас Тейлор

14

Я знайшов спосіб для цього в мережі

Це вимагає трохи роботи, тому що це потрібно робити за столом. Але в будь-якому випадку я міг скопіювати таблиці, дані та обмеження в базу даних MS SQL.

Ось посилання

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


1
Тобто, коли і Mysql, і SQL знаходяться в одній машині, або вони підключені через мережу. Це не корисно, коли існують дві різні машини, і у вас є файл дампа з mysql. так?
Espanta

7

Якщо ви експортуєте за допомогою PhpMyAdmin , ви можете переключити режим сумісності sql на 'MSSQL'. Таким чином, ви просто запускаєте експортований скрипт проти вашої бази даних MS SQL, і все готово.

Якщо ви не можете або не хочете використовувати PhpMyAdmin, у mysqldump також є варіант сумісності , але особисто я волів би, щоб PhpMyAdmin зробив це за мене.


1
Ця відповідь спрацювала для мене, з мінімальними змінами в створеному сценарії. Ввів його в SQL Server 2012. Раніше не бачив режиму сумісності.
Кіль

7

Ось мій підхід до імпорту файлів .sql до MS SQL:

  1. Експортувати таблицю з MySQL з --compatible=mssqlта --extended-insert=FALSEопціями:

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

  2. Розділіть експортований файл за допомогою PowerShell на 300000 рядків на файл:

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

  3. Запустіть кожен файл у MS SQL Server Management Studio

Є кілька порад, як прискорити вставки .

Інший підхід полягає у використанні –whereопції mysqldump . За допомогою цієї опції ви можете розділити таблицю за будь-яких умов, які підтримуються whereреченням sql.


як ми можемо експортувати всю базу даних замість таблиці за таблицею
MonsterMMORPG

спробуйте --databases [db_name]ключове слово, як це пояснюється у цій відповіді: stackoverflow.com/a/26096339/155687
Владислав

4

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

Ось кроки, які я зробив (під Ubuntu Linux):

  1. Створено таблицю в MS SQL, структура якої відповідає вихідній таблиці в MySql.

  2. Встановлений командний рядок MS SQL: https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools#ubuntu

  3. Звантажена таблиця з MySql у файл:

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

  2. Нарешті, я переглянув ці невеликі файли, зробив заміну тексту та виконував фрагменти по одному на сервері MS SQL:

експортувати SQLCMD = / opt / mssql-tools / bin / sqlcmd

x = 0

для файлу в частині *
робити
  ехо "Експорт файлу [$ файл] у MS SQL. Оброблено $ x тис."

  # замінює \ 'на'
  sed -i "s / \\\ '/' '/ g" "$ файл"

  # видаляє все "
  sed -i 's / "// g'" $ файл "

  # дозволяє вставляти записи із зазначеним PK (id)
  sed -i "1s / ^ / SET IDENTITY_INSERT $ TABLE ON; \ n /" "$ файл"

  "$ SQLCMD" -S "$ AZURE_SERVER" -d "$ AZURE_DB" -U "$ AZURE_USER" -P "$ AZURE_PASS" -i "$ файл"
  ехо ""
  ехо ""

  x = $ ((x + 1))
зроблено

ехо "Готово"

Звичайно , ви повинні замінити свої змінні , як $AZURE_SERVER, $TABLEі т.д. з вашими.

Сподіваюся, що це допомагає.


3

Мені найкраще вдалося експортувати всі дані за допомогою цієї команди:

mysqldump -u USERNAME -p --all-databases --complete-insert --extended-insert=FALSE --compatible=mssql > backup.sql

--extended-insert = FALSE потрібно, щоб уникнути обмеження імпорту 1000 рядків mssql.

Я створив свої таблиці за допомогою мого інструменту міграції, тому я не впевнений, що СТВОРИТИ з файлу backup.sql буде працювати.

У SSMS MSSQL мені довелося імпортувати таблицю даних за таблицею з IDENTITY_INSERT ON, щоб писати поля ID:

SET IDENTITY_INSERT dbo.app_warehouse ON;
GO 
INSERT INTO "app_warehouse" ("id", "Name", "Standort", "Laenge", "Breite", "Notiz") VALUES (1,'01','Bremen',250,120,'');
SET IDENTITY_INSERT dbo.app_warehouse OFF;
GO 

Якщо у вас є стосунки, вам слід імпортувати дочірню дитину, а потім таблицю із зовнішнім ключем.



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

Ви можете використовувати програму sqlie для перетворення з mysql на sqlserver; ви можете переглянути це відео https://www.youtube.com/watch?v=iTVEqys_vTQ&t=108s


1
Ласкаво просимо до Stackoverflow @gorgino! Якщо ви розміщуєте посилання, будь ласка, також опублікуйте короткий підсумок вмісту на випадок, якщо посилання буде припинено в майбутньому. Linking повинні в основному використовуватися для розширення вашої відповіді, чи не буде ваша відповідь.
Cribber
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.