我必须导入一个大的mysql转储(最多10G)。但是,已经使用具有索引定义的数据库结构预定义了sql转储。我想通过删除索引和表定义来加速数据库插入。
这意味着我必须删除/修改 10G 文本文件的前几行。什么是最有效的方法
需要将整个文件加载到RAM中的程序对我来说太过分了。
答案 0 :(得分:32)
尝试将它们编辑为空格,而不是删除前几行。
hexedit
程序可以执行此操作 - 它以块的形式读取文件,因此打开10GB文件与打开100KB文件没什么不同。
$ 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 :(得分:3)
joe是一个适用于大文件的编辑器。我只是用它来编辑~5G SQL转储文件。打开文件花了大约一分钟,保存几分钟,很少使用swap(在具有4G RAM的系统上)。
答案 2 :(得分:2)
sed 's/OLD_TEXT/NEW_TEXT/g' < oldfile > newfile
或
cat file | sed 's/OLD_TEXT/NEW_TEXT/g' > newfile
答案 3 :(得分:-1)
Perl可以逐行读取文件:
perl -pi.bak -e's / ^ create index / - create index /'