有没有什么技巧可以使用 mysqldump(或类似命令)对 MySQL 进行增量或差异备份?
答案1
您可以通过启用然后备份二进制日志来模拟增量备份。请参阅http://dev.mysql.com/doc/refman/5.1/en/backup-methods.html在“通过启用二进制日志进行增量备份”下。
答案2
如果您使用 InnoDB,请查看 Xtrabackup (由 Percona 提供)。它可以执行增量备份。
http://www.percona.com/docs/wiki/percona-xtrabackup:xtrabackup:incremental?rev=1289183209
干杯
答案3
我使用 binlogs,但它们不是最终的解决方案,而且我发现自己也倾向于依赖快照。
主要有两个原因:
- Binlog 存储所有更改。一周的 Binlog 可能比相隔一周的两个快照之间的差异大得多。唯一的安慰是 Binlog 往往压缩得很好(通常远低于 10%)。
- 如果您需要进行审计或回溯,那么根据旧的快照重放 binlog 将花费很长时间,并且 binlog 越大,出现错误的可能性就越大,因此您需要定期快照。
我最近有大量快照,既没有压缩也没有差异。我尝试了 diff,发现即使使用 no context 等选项,生成的 diff 也会更大。
在没有尝试所有替代方案的情况下,我发现最好的方法是 rdiff。这将它们的大小减少到大约 5%,然后用 xz 压缩到 1% 的区域。
虽然 rdiff 签名文件由于是哈希集合(与随机数据相同),因此压缩效果不佳,但将它们相互压缩应该会产生良好的结果。
许多人不需要这样的解决方案,因为在大多数情况下,如果出现故障,他们将需要将最新的图像存储到数据库中,并尽快进行更新。
但是,如果您有一个复杂的系统,需要大量的会计、审计、调试等(比博客更重要的事情),那么快照的有效存储就变得非常重要。
答案4
查看https://sourceforge.net/projects/mysqlincrementalbackup/脚本。MyISAM 和 Innodb 的增量备份解决方案。