我有 Linuxcentos 6.4
服务器mysql5.6
我有 cron 任务来每小时进行 mysql 数据库备份,如下所示
它在 python 中
os.popen("mysqldump -u %s --password=%s -h %s -e --opt --skip-lock-tables --skip-extended-insert -c %s | gzip -c > %s.gz" % (username, password, hostname, database, filename))
问题是,只有很少的数据被更改,但每次我都必须备份所有数据库 24 次,这占用了太多空间。
最好的替代方案是什么
有没有办法进行增量备份,以便我每周对数据库进行一次完整备份,然后只进行增量备份。
我希望为不同的数据库设置不同的文件,这样如果我需要恢复单个数据库,我也可以这样做
答案1
非常简单:binlogging。配置 mysql 以保留二进制日志至少一天(可能更长时间)。然后将备份更改为不执行 mysqldump,而是使用类似 xtrabackup 的东西。
这样,您可以将备份计划减少到每天一次,并且仍然可以使用 binlog 前滚到任何时间点。
答案2
大多数情况下,每小时备份一次是很愚蠢的。也许你需要考虑将 mysql 复制到另一个节点。
答案3
你可以做增量备份使用 xtrabackup。要恢复单个数据库,请准备完整和增量备份(包括所有数据库),然后使用 xtrabackup 目录作为数据目录运行 MySQL,并对所需的单个数据库进行 mysqldump。
答案4
如果你想节省空间,你可以继续每小时进行一次完整备份,但要备份到重复数据删除的文件系统,例如更少。您可以轻松地分割一个分区并格式化/安装它,lessfs
然后让它处理重复数据删除,同时仍然能够在任何时间点进行恢复,只是没有空间。