2009-03-31 2 views
14

Мне нужно импортировать большой дамп mysql (до 10G). Однако дамп sql уже предопределен структурой базы данных с определением индекса. Я хочу ускорить вставку db, удалив определение индекса и таблицы.Редактировать очень большой sql dump/text file (on linux)

Это означает, что я должен удалять/редактировать первые несколько строк текстового файла 10G. Каков наиболее эффективный способ сделать это на linux?

Программы, требующие загрузки всего файла в ОЗУ, будут для меня излишними.

ответ

29

Вместо удаление первых нескольких строк, попробуйте отредактировать их как пробелы.

Программа hexedit может это сделать - она ​​читает файлы в кусках, поэтому открытие файла размером 10 ГБ не отличается от открытия файла 100 КБ.

$ hexedit largefile.sql.dump 
tab (switch to ASCII side) 
space (repeat as needed until your header is gone) 
F2 (save)/Ctrl-X (save and exit)/Ctrl-C (exit without saving) 
+1

спасибо! он отлично работает! Также ваше детальное решение очень помогло мне! благодаря! – geo

+0

Для тех, у кого нет доступа к любому репозиторию, вы можете получить исходный код для hexedit: http://rigaux.org/hexedit.html –

+0

hexedit, sed или собственный скрипт: http://muras.eu/2017/03/05/editing-big-mysqldump-files – Klerk

-1

Perl может прочитать файл построчно:

Perl -pi.bak -e 's/^ создать индекс/- создать индекс /'

+0

Для этого потребуется еще 10 ГБ свободного места и любое время, необходимое для передачи всего дампа из одного файла в новый файл. – ephemient

3

joe является редактором, который работает хорошо с большими файлами. Я просто использовал его для редактирования файла дампа ~ 5G SQL. Потребовалось около минуты, чтобы открыть файл и несколько минут, чтобы сохранить его, с очень небольшим использованием swap (в системе с 4G RAM).

+0

Я использовал его для 130-гигабайтного файла, и Joe неплохо работал с небольшим объемом памяти – jimkont

+0

Я просто использовал его для файла в 30 Гб ... взял 5 минут для загрузки на 16-гигабайтную машину памяти с заменой 8 ГБ ... – Ross

2
sed 's/OLD_TEXT/NEW_TEXT/g' <oldfile> newfile 

или

cat file | sed 's/OLD_TEXT/NEW_TEXT/g' > newfile 

 Смежные вопросы

  • Нет связанных вопросов^_^