我必须导入一个大型 mysql 转储(最多 10G)。然而,已经使用带有索引定义的数据库结构预定义了 sql 转储。我想通过删除索引和表定义来加速数据库插入。
这意味着我必须删除/编辑10G文本文件的前几行。在 linux上执行此操作的最有效方法是什么?
需要将整个文件加载到 RAM 中的程序对我来说太过分了。
我必须导入一个大型 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)
joe是一个可以很好地处理大文件的编辑器。我只是用它来编辑一个~5G SQL 转储文件。打开文件大约需要一分钟,保存文件需要几分钟,很少使用交换(在具有 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/^create index/--create index/'