在MySQL中进行增量备份的最佳方法是什么?

时间:2009-01-03 13:42:27

标签: mysql database backup

我们使用的是MySQL 5.0版,大部分表都是InnoDB。我们运行复制到从属服务器。我们正在考虑每天备份MySQL日志文件。

问题

  • 是否有其他方法可以在不使用日志文件的情况下进行增量备份?
  • 进行增量备份时的最佳做法是什么?

3 个答案:

答案 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的现成脚本:

macournoyer/mysql_s3_backup

Abhishek-S-Patil/mysql-backup-incremental

还有一些付费的解决方案,实际上是这些工具的精美包装:

SqlBak

databasethink

进行增量备份的最佳做法是什么?

这完全取决于您的体系结构,数据量以及可接受的最大允许停机时间间隔。最大允许的数据丢失间隔。在设置备份之前,请考虑以下因素。

我只想提及一种很好的做法,但这很重要,而且经常被人们遗忘。定期在另一台不相关的服务器上测试并运行恢复脚本。

答案 2 :(得分:0)

您可以使用mysqldump定期转储模式,每个模式始终使用相同的文件名和路径(即替换最新的模式)

然后将其与支持增量/增量备份的任何备份工具结合使用,例如rdiff-backup,duplicity,Duplicati或Areca Backup。来自duplicity docs的一个例子:

  

由于duplicity使用librsync,增量归档是空格   高效,只记录自那以后发生变化的文件部分   最后一次备份

这样,您的第一个备份将是第一个完整转储的压缩副本,第二个备份将包含第一个和第二个转储的压缩差异,依此类推。您可以恢复任何时间点的mysqldump文件,然后将该文件恢复为MySQL。