增量备份¶
xtrabackup工具和innobackupex工具都支持增量备份。增量备份仅备份自上次备份以来发生变化的数据。
您可以在每个完全备份之间执行多个增量备份。例如,您可以每周执行一次完全备份,每天执行一次增量备份,或者每天执行一次完全备份,每小时执行一次增量备份。
增量备份之所以有效,是因为每个备份InnoDB页面中包含日志序列号。的LSN整个数据库的系统版本号。每一页的LSN显示了它最近的变化。
增量备份复制其所在的每个页面LSN是否比之前的增量备份或完全备份更新LSN。有两种算法用于查找要复制的这类页面集。第一个检查页面,所有服务器类型和版本都可用LSN直接读取所有数据页。第二种,可用雷竞技下载官网用于MySQL的Percona服务器,启用更改页面跟踪服务器上的特性,它将在页面被更改时记录页面。然后,这些信息将被写入一个紧凑的单独的所谓位图文件。xtrabackup二进制文件使用该文件仅读取增量备份所需的数据页。这个特性潜在地节省了许多读请求。如果xtrabackup二进制文件找到位图文件,则默认启用后一种算法。可以指定xtrabackup——incremental-force-scan读取所有页面,即使位图数据可用。
重要的
增量备份不会将数据文件与前一次备份的数据文件进行比较。基于此原因,在部分备份可能导致数据不一致。
增量备份读取页面并比较它们LSN到最后一个备份LSN。必须有完全备份才能恢复增量更改。如果没有完全备份作为基础,增量备份是无用的。
您可以使用——incremental-lsn选项,可以在没有之前备份的情况下执行增量备份(如果您知道它的话)LSN。
另请参阅:部分备份
创建增量备份¶
若要进行增量备份,请像往常一样从完全备份开始。xtrabackup二进制文件写入名为xtrabackup_checkpoints到备份的目标目录。该文件包含一行显示to_lsn,这是数据库的LSN在备份结束时。创建完全备份使用以下命令:
美元xtrabackup——备份——target-dir=/数据/备份/基地
如果您查看xtrabackup_checkpoint文件,应该会看到类似的内容,具体取决于您的LSN编号:
Backup_type = full- Backup_type from_lsn = 0 to_lsn = 1626007 last_lsn = 1626007 compact = 0 recover_binlog_info = 1
现在已经有了完全备份,可以在此基础上进行增量备份。使用如下命令:
美元xtrabackup——备份——target-dir=/ /备份/ inc1数据\——incremental-basedir=/数据/备份/基地
/data/backups/inc1/目录现在应该包含delta文件,例如ibdata1.delta和test/table1.ibd.delta。这些代表了自LSN 1626007。如果你仔细研究xtrabackup_checkpoints文件在这个目录下,你应该看到类似于下面的内容:
Backup_type = incremental from_lsn = 1626007 to_lsn = 4124244 last_lsn = 4124244 compact = 0 recover_binlog_info = 1
from_lsn备份和增量的起始LSN是否必须相同to_lsn(如果它是最后一个检查点)之前的/base备份。
现在可以使用这个目录作为另一个增量备份的基础:
美元xtrabackup——备份——target-dir=/数据/备份/装置\——incremental-basedir=/ /备份/ inc1数据
该文件夹还包含xtrabackup_checkpoints:
Backup_type = incremental from_lsn = 4124244 to_lsn = 6938371 last_lsn = 7110572 compact = 0 recover_binlog_info = 1
请注意
在这种情况下,你可以看到有一个区别to_lsn(最后一个检查点LSN)和last_lsn(上次复制的LSN),这意味着在备份过程中服务器上有一些流量。
准备增量备份¶
的xtrabackup——准备增量备份的步骤与完全备份的步骤不同。在完全备份中,执行两种类型的操作以使数据库保持一致:从日志文件中针对数据文件重播已提交的事务,回滚未提交的事务。在准备增量备份时,必须跳过未提交事务的回滚,因为备份时未提交的事务可能正在进行中,并且很可能在下一个增量备份中提交它们。你应该使用外备份——apply-log-only选项,以阻止回滚阶段。
请注意
如果您不使用xtrabackup——apply-log-only选项来阻止回滚阶段,那么您的增量备份是无用的事务回滚后,不能应用进一步的增量备份。
从您创建的完整备份开始,您可以准备它,然后对其应用增量差异。回想一下,您有以下备份:
/data/backups/base /data/backups/inc1 /data/backups/inc2 .使用实例
要准备基本备份,您需要像往常一样运行xtrabackup -prepare,但要防止回滚阶段:
美元xtrabackup——准备——apply-log-only——target-dir=/数据/备份/基地
输出应该以类似于下面的文本结束:
InnoDB: Shutdown completed;日志序列号1626007 161011 12:41:04完成OK!
日志序列号应与to_lsn你之前看到的基础备份。
请注意
此备份是安全的恢复,即使该操作跳过了回滚阶段。如果你恢复它并开始MySQL,InnoDB检测未执行回滚阶段,并将在后台执行此操作。此操作与启动时的崩溃恢复相同。此外,MySQL还会通知您数据库没有正常关闭。
使用实例对全量备份应用第一次增量备份。
美元xtrabackup——准备——apply-log-only——target-dir=/数据/备份/基地\——incremental-dir=/ /备份/ inc1数据
中的文件应用增量文件/数据/备份/基地,将它们前滚到增量备份的时间。然后像往常一样对结果应用重做日志。最后的数据出来了/数据/备份/基地,而不是增量目录。你应该会看到类似的输出:
已启用从1626007开始的增量备份。xtrabackup: cd to /data/backups/base xtrabackup:这个目标似乎已经用——apply-log-only准备好了。Xtrabackup: xtrabackup_logfile detected: size=2097152, start_lsn=(4124244)…xtrabackup: /tmp/backups/inc1/ibdata1.delta的page size为16384字节161011 12:45:56完成OK!
同样,LSN应该与您在前面检查第一个增量备份时看到的情况相匹配。如果你从/数据/备份/基地时,您应该看到第一次增量备份时的数据库状态。
警告
雷竞技下载官网Percona XtraBackup不支持使用同一个增量备份目录准备两份备份。不要跑xtrabackup——准备使用相同的增量备份目录(——incremental-dir)不止一次。
准备第二次增量备份的过程类似:对(修改后的)基本备份应用增量,您将及时前滚其数据到第二次增量备份的点:
美元xtrabackup——准备——target-dir=/数据/备份/基地\——incremental-dir=/数据/备份/装置
请注意
xtrabackup——apply-log-only应该在合并除最后一个增量之外的所有增量时使用。这就是前一行不包含额外备份的原因——apply-log-only选择。即使xtrabackup——apply-log-only在最后一步使用时,备份仍然是一致的,但在这种情况下,服务器将执行回滚阶段。