编辑非常大的sql转储/文本文件(在linux上)

编辑非常大的sql转储/文本文件(在linux上),linux,mysqldump,large-files,Linux,Mysqldump,Large Files,我必须导入一个大型mysql转储(最多10G)。但是,sql转储已经使用带有索引定义的数据库结构预定义。我想通过删除索引和表定义来加速db插入 这意味着我必须删除/编辑10G文本文件的前几行。在linux上执行此操作的最有效方法是什么 需要将整个文件加载到RAM中的程序对我来说是一种过度杀伤力。与其删除前几行,不如尝试将它们编辑为空白 hexedit程序可以做到这一点——它以块的形式读取文件,因此打开10GB的文件与打开100KB的文件无异 $ hexedit largefile.sql.dum

我必须导入一个大型mysql转储(最多10G)。但是,sql转储已经使用带有索引定义的数据库结构预定义。我想通过删除索引和表定义来加速db插入

这意味着我必须删除/编辑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)

Perl可以逐行读取文件:


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

是一个可以很好地处理大型文件的编辑器。我只是用它来编辑一个~5G SQL转储文件。打开文件大约需要一分钟的时间,保存文件需要几分钟的时间,几乎不用交换(在4G RAM系统上)。

谢谢!它工作得很好!您的详细解决方案也帮了我很大的忙!谢谢对于无法访问任何存储库的用户,您可以从以下位置获取hexedit的源代码:hexedit、sed或自定义脚本:这将需要另外10GB的可用空间,从一个文件到一个新文件流式传输整个转储所需的时间。我用它来处理130GB的文件,Joe的工作也很好,内存占用很小。我只用它来处理30gb的文件…在16gb内存机器上加载8GB交换需要5分钟。。。
sed 's/OLD_TEXT/NEW_TEXT/g' < oldfile > newfile
cat file | sed 's/OLD_TEXT/NEW_TEXT/g' > newfile