【发布时间】:2018-12-08 18:57:20
【问题描述】:
在数据库备份过程中,我生成了一个文本转储文件。由于数据库很大,转储文件也很大,所以我用 gzip 压缩它。压缩是在生成转储时内联完成的(感谢 Unix 管道!)。
在流程结束时,我通过查看最后一行检查转储文件的有效性并检查“转储完成”字符串是否存在。在我的脚本中,我通过将最后一行提取到变量中来做到这一点:
str=`zcat ${PATHSAVE}/dumpFull.sql.gz | tail -n1`
由于数据库转储文件很大(目前超过 200 Gb),此结束进程检查需要很长时间才能运行(目前超过 180 分钟)。
我正在寻找一种方法来更快地提取 .gz 文件的最后一行...有人知道吗?
注1:为了解释上下文,我们可以说数据库是MySql社区,备份工具是mysqldump,生成的dumpfile是一个全文文件。操作系统是 CentOs。备份脚本是 Bash shell 脚本。
注意 2: 我知道 Percona xtraBackup,但在我的情况下,我想将 mysqldump 用于这个特定的备份工作。恢复所需的时间不是问题。
【问题讨论】:
-
你能改变gzip文件的创建方式吗? gzip 格式的一个子集被称为“rsyncable”gzip,它每隔一段时间就会重置压缩表;对于那些人来说,中途开始阅读是可行的(只丢弃直到下一个重置点的信息)。当然,压缩比会有所损失,但可以通过更改此类重启的频率来调整。