在 Linux 上压缩大文件

在 Linux 上压缩大文件

我使用命令得到了几个大文件

mysql> select * into outfile ...

例如dump_news.sql、dump_weibo.sql、dump_report.sql……

总大小大约7.6G,我使用命令

tar -zcvf dump.tar.gz dump_*

在 Linux 上,压缩上述文件,但是需要大约 4 个小时。这太长了。我测试了 bzip2 工具,它需要更长的时间,但压缩文件的大小较小。所以我想知道是否有一个工具可以让我更快地完成压缩。

答案1

几个月前,我不得不压缩我的整个主目录,因此我编写了一个 bash 脚本,它在多个进程中运行 tar,并跟踪进程数,以便同时始终有 6 个进程运行(我有 4 个核心,因此有 6 个线程,这样它就可以在等待 iowait 时进行压缩,因为我通过 USB 将它放到我的硬盘上)。

我的脚本在这里:https://gist.github.com/3989700

如果将输出文件夹更改为所需的输出目的地,将所有 sql 文件放在与脚本相同的文件夹中,授予其可执行权限,然后从终端运行它,它应该会压缩您的文件。

您可能还想更改其运行的线程数以适合您自己的处理器。

答案2

压缩约 8G 需要 4 个小时,这太耗时了。探索@Piskvor 的建议。

另外,不必将 SQL 输出保存到文件并压缩,而是可以通过管道查询和压缩。

mysql -e "query" other_options | gzip > OUT_FILE

另外如果你感兴趣的话可以检查一下 gzip 与 bzip 与 lzma 的关系

答案3

首先,为了获得更快的速度,您可以接受较少的压缩。您可以将 tar 输出通过管道传输到 gzip,并为 gzip 指定 -1 到 -3 的压缩级别参数,然后查看效果如何。

其次,正如@Piskvor 所说,你可以使用多个处理器和内核,可以用作 gzip 的替代品。

如果您追求速度,bzip2(包括并行 bzip2)就会朝着错误的方向发展。

答案4

lzop在 CPU 方面比 更快gzip(但压缩率较低),但是由于磁盘 IO 限制,除非您拥有固态硬盘或 raid 阵列,否则您将无法获得比这更快的速度。

相关内容