У мене є файл .sql із дампа MySQL, що містить таблиці, визначення та дані, які слід вставити в ці таблиці. Як я можу перетворити цю базу даних, представлену у файлі дампа, у базу даних MS SQL Server?
У мене є файл .sql із дампа MySQL, що містить таблиці, визначення та дані, які слід вставити в ці таблиці. Як я можу перетворити цю базу даних, представлену у файлі дампа, у базу даних MS SQL Server?
Відповіді:
Використовуйте помічник міграції 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 працює нормально.
Я пропоную вам використовувати mysqldump так:
mysqldump --compatible=mssql
phpMyAdmin все ще є веб-програмою і потенційно може мати певні обмеження для великих баз даних (час виконання сценарію, виділена пам'ять тощо).
Я знайшов спосіб для цього в мережі
Це вимагає трохи роботи, тому що це потрібно робити за столом. Але в будь-якому випадку я міг скопіювати таблиці, дані та обмеження в базу даних MS SQL.
Ось посилання
http://www.codeproject.com/KB/database/migrate-mysql-to-mssql.aspx
Якщо ви експортуєте за допомогою PhpMyAdmin , ви можете переключити режим сумісності sql на 'MSSQL'. Таким чином, ви просто запускаєте експортований скрипт проти вашої бази даних MS SQL, і все готово.
Якщо ви не можете або не хочете використовувати PhpMyAdmin, у mysqldump також є варіант сумісності , але особисто я волів би, щоб PhpMyAdmin зробив це за мене.
Ось мій підхід до імпорту файлів .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}
Запустіть кожен файл у MS SQL Server Management Studio
Є кілька порад, як прискорити вставки .
Інший підхід полягає у використанні –where
опції mysqldump . За допомогою цієї опції ви можете розділити таблицю за будь-яких умов, які підтримуються where
реченням sql.
--databases [db_name]
ключове слово, як це пояснюється у цій відповіді: stackoverflow.com/a/26096339/155687
У мене була дуже подібна проблема сьогодні - мені потрібно було скопіювати велику таблицю (5 мільйонів рядків) з MySql у MS SQL.
Ось кроки, які я зробив (під Ubuntu Linux):
Створено таблицю в MS SQL, структура якої відповідає вихідній таблиці в MySql.
Встановлений командний рядок MS SQL: https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools#ubuntu
Звантажена таблиця з MySql у файл:
mysqldump \ --компакт \ --complete-insert \ --no-create-info \ --compatible = mssql \ --extended-insert = FALSE \ --host "$ MYSQL_HOST" \ --користувач "$ MYSQL_USER" \ -p "$ MYSQL_PASS" \ "$ MYSQL_DB" \ "$ TABLE"> "$ FILENAME"
У моєму випадку файл дампа був досить великим, тому я вирішив розділити його на кілька невеликих частин (по 1000 рядків) - split --lines=1000 "$FILENAME" part-
Нарешті, я переглянув ці невеликі файли, зробив заміну тексту та виконував фрагменти по одному на сервері 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
і т.д. з вашими.
Сподіваюся, що це допомагає.
Мені найкраще вдалося експортувати всі дані за допомогою цієї команди:
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
Якщо у вас є стосунки, вам слід імпортувати дочірню дитину, а потім таблицю із зовнішнім ключем.
Також ви можете використовувати 'ODBC' + 'Майстер імпорту та експорту SQL Server'. Нижче посилання описує це: https://www.mssqltips.com/sqlservertutorial/2205/mysql-to-sql-server-data-migration/
Виконати:
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
Ви можете використовувати програму sqlie для перетворення з mysql на sqlserver; ви можете переглянути це відео https://www.youtube.com/watch?v=iTVEqys_vTQ&t=108s