滚动差异来存储高度相似的文件?

滚动差异来存储高度相似的文件?

在工作中,我们每晚都会转储 mysql 数据库。日复一日,我估计接近 90-95% 的数据是重复的,并且随着时间的推移而增加。 (哎呀,在这一点上有些可能是99%)

这些转储中的一行是单个 mysql INSERT 语句,因此唯一的区别是整行以及它们在文件中的顺序。如果我对它们进行排序,文件之间的实际差异将非常小。

我一直在寻找,但没有找到任何方法对转储上的输出进行排序。不过,我可以通过命令管道它sort。然后就会有很长很长的相同线条块。

所以我试图找到一种只存储差异的方法。我可以从主转储开始,然后每天晚上进行比较。但每晚的差异都会更大。或者,我可以制作滚动差异,这些差异单独来看会非常小,但如果我必须每天晚上将整个系列的主差异放在一起,那么计算起来似乎会花费越来越长的时间。

这可行吗?用什么工具?


编辑我不是问如何做mysql备份。暂时忘记mysql。这是一条红鲱鱼。我想知道的是如何从一系列文件中制作一系列滚动差异。每天晚上我们都会收到一个文件(恰好是一个 mysqldump 文件)与之前的相似度为 99%。是的,我们将它们全部压缩。但一开始就有这么多冗余是多余的。我真正需要的是与前一天晚上的差异...与前一天晚上只有 1% 的差异...等等。所以我所追求的是如何进行一系列差异,这样我每晚只需要存储 1% 的数据。

答案1

两个可以存储二进制差异的备份工具是rdiff 备份表里不一。两者都基于librsync,但在此基础上,它们的行为截然不同。Rdiff-backup 存储最新的副本和反向差异,而 duplicity 存储传统的增量差异。这两个工具还提供了一组不同的外围功能。

答案2

最近我一直在尝试在 git 中存储数据库转储。如果您的数据库转储非常大,这可能会变得不切实际,但它对我来说适用于小型数据库(Wordpress 网站等)。

我的备份脚本大致是:

cd /where/I/keep/backups && \
mysqldump > backup.sql && \
git commit -q -m "db dump `date '+%F-%T'`" backup.sql

答案3

你可以做这样的事情(作为a.sql你的每周备份)。

mysqldump > b.sql
diff a.sql b.sql > a1.diff
scp a1.diff backupserver:~/backup/

到本周末,您的差异文件将会变得更大。

我的建议是 gzip 它(用于gzip -9最大压缩)。我们目前这样做,使用 59MB 的 gz 文件,而原始文件为 639MB。

答案4

(我还没有在生产中这样做。)

每天或每周进行一次完整备份。每小时或每天备份一次中继日志。

相关内容