我必须导入一个大型的mysql转储(最多10G)。 然而,sql转储已经预先定义了一个带有索引定义的数据库结构。 我想通过删除索引和表定义来加快数据库插入。
这意味着我必须删除/编辑 10G文本文件的前几行。 什么是最有效的方式在Linux上做到这一点?
需要将整个文件加载到RAM中的程序对我来说太过于浪费。
不要删除前几行,请尝试将它们编辑为空格。
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)
乔是一个编辑器,适合大型文件。 我只是用它来编辑〜5G的SQL转储文件。 打开文件需要大约一分钟,几分钟就可以保存,只需很少使用swap(在具有4G RAM的系统上)。
sed 's/OLD_TEXT/NEW_TEXT/g' < oldfile > newfile
要么
cat file | sed 's/OLD_TEXT/NEW_TEXT/g' > newfile
Perl可以逐行读取文件:
perl -pi.bak -e's / ^创建索引/ – 创建索引/'