我们使用的是MySQL 5.0版,大部分表都是InnoDB。我们运行复制到从属服务器。我们正在考虑每天备份MySQL日志文件。
答案 0 :(得分:8)
AFAIK进行增量备份的唯一方法是使用二进制日志。如果要进行完全备份(InnoDB hotcopy),还有其他选项,但增量意味着您需要记录所有已完成的事务。
您需要问自己为什么要备份数据。由于您有一个用于复制的从属设备,我认为备份主要用于在意外删除时恢复数据?
我可能每隔1小时轮换一次日志并备份它。这意味着,恢复会使数据最多保留1小时,并且您可以恢复到自上次完整快照以来的任何时间点。
答案 1 :(得分:1)
自上次回答以来已经过去了很多时间,在此期间,出现了一些用于实现增量备份的解决方案和工具。
两个主要的:
Percona XtraBackup-是MySQL的开源热备份实用程序- 备份期间不会锁定数据库的基于服务器的服务器。它 还允许您创建增量备份。更多详细信息here。
这非常简单,看起来像这样:
xtrabackup --backup --target-dir=/data/backups/inc1 --incremental-basedir=/data/backups/base
mysqlbackup
是一个实用程序,包含在mysql企业版中
版。这很像percona xtrabackup。详细比较
可以找到here
它具有参数--incremental
,可用于进行增量备份。更多详细信息here
mysqlbackup --defaults-file=/home/dbadmin/my.cnf --incremental --incremental-base=history:last_backup --backup-dir=/home/dbadmin/temp_dir --backup-image=incremental_image1.bi backup-to-image
这两个实用程序可以进行物理备份(复制数据库文件),但是您仍然可以对binlog文件进行逻辑备份。
您可以自己编写脚本,也可以使用来自github的现成脚本:
Abhishek-S-Patil/mysql-backup-incremental
还有一些付费的解决方案,实际上是这些工具的精美包装:
进行增量备份的最佳做法是什么?
这完全取决于您的体系结构,数据量以及可接受的最大允许停机时间间隔。最大允许的数据丢失间隔。在设置备份之前,请考虑以下因素。
我只想提及一种很好的做法,但这很重要,而且经常被人们遗忘。定期在另一台不相关的服务器上测试并运行恢复脚本。
答案 2 :(得分:0)
您可以使用mysqldump定期转储模式,每个模式始终使用相同的文件名和路径(即替换最新的模式)
然后将其与支持增量/增量备份的任何备份工具结合使用,例如rdiff-backup,duplicity,Duplicati或Areca Backup。来自duplicity docs的一个例子:
由于duplicity使用librsync,增量归档是空格 高效,只记录自那以后发生变化的文件部分 最后一次备份
这样,您的第一个备份将是第一个完整转储的压缩副本,第二个备份将包含第一个和第二个转储的压缩差异,依此类推。您可以恢复任何时间点的mysqldump文件,然后将该文件恢复为MySQL。