Перенести таблицу с MS SQL Server на MySQL

Мне нужно перенести таблицу с MSSQL Server на MySql. Проблема в том, что таблица довольно большая (65 миллионов записей) и весь процесс занимает слишком много времени. Кто-нибудь знает, как ускорить процесс? Любые полезные инструменты, которые могли бы улучшить это?


person user29891    schedule 23.10.2008    source источник
comment
Аналогичный ответ: stackoverflow.com/questions/11619177/   -  person Jacob    schedule 02.08.2012


Ответы (7)


вы можете экспортировать данные в текст, а затем использовать оператор загрузки mysql:

загрузить локальный файл данных '/somefolder/text_file_with_data.txt' в таблицу поля some_table, заканчивающиеся '\t' строками, заканчивающимися '\n'

или если вы поместите файл данных на сервер mysql, вы можете:

загрузить файл данных '/somefolder_on_the_mysql_server/text_file_with_data.txt' в таблицу, некоторые_поля_таблицы заканчиваются '\t' строками, заканчивающимися '\n'

Я не уверен, какой синтаксис для экспорта mssql.

Вы всегда можете экспортировать наборами по 10 000 или 100 000 штук.

person SWD    schedule 23.10.2008

Нужно сделать это только один раз? Не тратьте слишком много времени на оптимизацию, дождитесь завершения и двигайтесь дальше.

Нужно делать это чаще? Затем было бы полезно уточнить, какие инструменты/методы вы используете в настоящее время.

person Tomalak    schedule 23.10.2008

Вот как я перенес таблицу записей 800 000 с сервера MS Sql на MySQL.

Создайте запрос для отображения данных в табличном формате:

SELECT [PostalCode] + ' ' +
  [StateCode] + '   ' +
  [Latitude] + '    ' +
  [Longitude] + '   ' +
  [CityName]  
FROM [dbo].[PostalCode]

Выполните запрос с помощью SQL Server Management Studio и выберите вывод результатов в файл (Меню: Запрос -> Результаты в -> Результаты в файл).

Имя файла должно быть именем таблицы в MySQL. Расширение файла не имеет значения.

Затем используйте mysqlimport.exe (в Windows) для импорта данных (таблица должна существовать в базе данных MySQL):

mysqlimport.exe --user=user_name
  --columns=postalcode,statecode,latitude,longitude,cityname 
  --ignore-lines=2 databaseName pathToFile

После импорта мне пришлось удалить последние 2 записи таблицы, потому что конец файла содержал мусор: (818193 затронутых строк)

Для 800K это довольно быстро: 10 секунд на экспорт и 10 секунд на импорт.

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

person Costo    schedule 31.07.2009

Убедитесь, что таблицы mysql изначально не имеют индексов; добавьте их после завершения загрузки.

person apolinsky    schedule 23.10.2008

Перед началом вставки убедитесь, что файл хранилища таблиц MySQL достаточно велик, используя такой оператор в файле my.ini:

innodb_data_file_path=ibdata1:1000M:autoextend
person Serge Wautier    schedule 23.10.2008

Попробуйте получить данные из mssql в mysql с помощью пакетов SSIS/DTS, которые вы можете сгенерировать с помощью мастера импорта/экспорта SQL Server. (Подключитесь к MySQL с помощью соответствующего поставщика OLEDB/ADO.

Запустите его, когда отправитесь домой в пятницу, и вернитесь после выходных ;)

person thijs    schedule 23.10.2008

Убедитесь, что столбцы не имеют индекса, и удалите все внешние ключи (если вы используете InnoDB для типа таблицы) для импорта.

person Jon Tackabury    schedule 23.10.2008