14

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

问题

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

3 回答 3

8

AFAIK 进行增量备份的唯一方法是使用二进制日志。如果要进行完整备份(InnoDB hotcopy),您还有其他选择,但增量意味着您需要记录所有事务。

您需要问自己为什么要备份数据。由于您有一个用于复制的从属设备,我假设备份主要用于在意外删除的情况下恢复数据?

我可能会每 1 小时轮换一次日志并对其进行备份。意思是,还原最多会使数据保留 1 小时,并且您可以还原到自上次完整快照以来的任何时间点。

于 2009-01-03T14:04:13.140 回答
2

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

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

由于 duplicity 使用 librsync,增量归档节省空间,并且仅记录自上次备份以来已更改的文件部分

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

于 2017-06-21T13:45:15.543 回答
2

自上次回答以来已经过去了很长时间,在此期间出现了一些用于实施增量备份的解决方案和工具。

两个主要的:

  • Percona XtraBackup - 是基于 MySQL 的服务器的开源热备份实用程序,在备份期间不会锁定您的数据库。它还允许您创建增量备份。更多细节在这里

    这很简单,看起来像这样:

    xtrabackup --backup --target-dir=/data/backups/inc1 --incremental-basedir=/data/backups/base
    
  • mysqlbackup是一个实用程序,包含在 mysql 企业版中。它很像 percona xtrabackup。
    可以在这里找到详细的比较
    它具有--incremental允许您进行增量备份的参数。更多细节在这里

    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

数据库思维

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

这完全取决于您的架构、数据量、您可以接受的最大允许停机时间间隔。允许的最大数据丢失间隔。在设置备份之前考虑这些事情。

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

于 2020-11-10T17:54:29.517 回答