Мне нужно перенести таблицу с MSSQL Server на MySql. Проблема в том, что таблица довольно большая (65 миллионов записей) и весь процесс занимает слишком много времени. Кто-нибудь знает, как ускорить процесс? Любые полезные инструменты, которые могли бы улучшить это?
Перенести таблицу с MS SQL Server на MySQL
Ответы (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 штук.
Нужно сделать это только один раз? Не тратьте слишком много времени на оптимизацию, дождитесь завершения и двигайтесь дальше.
Нужно делать это чаще? Затем было бы полезно уточнить, какие инструменты/методы вы используете в настоящее время.
Вот как я перенес таблицу записей 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 секунд на импорт.
Надеюсь это поможет.
Убедитесь, что таблицы mysql изначально не имеют индексов; добавьте их после завершения загрузки.
Перед началом вставки убедитесь, что файл хранилища таблиц MySQL достаточно велик, используя такой оператор в файле my.ini:
innodb_data_file_path=ibdata1:1000M:autoextend
Попробуйте получить данные из mssql в mysql с помощью пакетов SSIS/DTS, которые вы можете сгенерировать с помощью мастера импорта/экспорта SQL Server. (Подключитесь к MySQL с помощью соответствующего поставщика OLEDB/ADO.
Запустите его, когда отправитесь домой в пятницу, и вернитесь после выходных ;)
Убедитесь, что столбцы не имеют индекса, и удалите все внешние ключи (если вы используете InnoDB для типа таблицы) для импорта.