У меня есть файл .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]
ключевое слово try, как это объясняется в этом ответе: 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 = ЛОЖЬ \ --host "$ MYSQL_HOST" \ --user "$ MYSQL_USER" \ -p "$ MYSQL_PASS" \ "$ MYSQL_DB" \ "$ TABLE"> "$ FILENAME"
В моем случае файл дампа был довольно большим, поэтому я решил разбить его на несколько маленьких частей (по 1000 строк каждая) - split --lines=1000 "$FILENAME" part-
Наконец, я перебрал эти небольшие файлы, произвел некоторые замены текста и выполнил части один за другим на сервере MS SQL:
экспорт SQLCMD = / opt / mssql-tools / bin / sqlcmd х = 0 для файла частично - * делать echo "Экспорт файла [$ file] в MS SQL. Обработано x тысяч долларов" # заменяет \ 'на' ' sed -i "s / \\\ '/' '/ g" "$ file" # удаляет все " sed -i 's / "// g'" $ файл " # позволяет вставлять записи с указанным 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" эхо "" эхо "" х = $ ((х + 1)) сделанный эхо "Готово"
Конечно, вам нужно заменить мои переменные, например $AZURE_SERVER
, $TABLE
и т. Д., На ваши.
Надеюсь, это поможет.
Для меня лучше всего было экспортировать все данные с помощью этой команды:
mysqldump -u USERNAME -p --all-databases --complete-insert --extended-insert=FALSE --compatible=mssql > backup.sql
--extended-insert = FALSE необходимо, чтобы избежать ограничения импорта mssql 1000 строк.
Я создал свои таблицы с помощью инструмента миграции, поэтому не уверен, что CREATE из файла backup.sql будет работать.
В SSMS MSSQL мне пришлось импортировать таблицу данных по таблице с IDENTITY_INSERT ON, чтобы записать поля идентификатора:
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