views:

3184

answers:

2

I have to import a large mysql dump (up to 10G). However the sql dump already predefined with a database structure with index definition. I want to speed up the db insert by removing the index and table definition.

That means I have to remove/edit the first few lines of a 10G text file. What is the most efficient way to do this on linux?

Programs that require loading the entire file into RAM will be an overkill to me.

+5  A: 

Rather than removing the first few lines, try editing them to be whitespace.

The hexedit program can do this-- it reads files in chunks, so opening a 10GB file is no different from opening a 100KB file to it.

$ 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)
sysrqb
thanks! it works perfectly! Also your detail solution helped me a lot! thanks!
geo
A: 

Perl can read the file line by line:

perl -pi.bak -e 's/^create index/--create index/'

Chas. Owens
This will require another 10GB of free space, and whatever time it takes to stream the whole dump from one file to a new file.
ephemient