XtraBackup 增量备份是什么
增量备份只拷贝上次备份以来发生变化的数据页,依据是每页记录的 LSN(日志序列号)。恢复时把增量按顺序合并进全量副本:全量和中间增量都用 --apply-log-only 保留尚未完成的状态,只有最后一次合并不加该参数。链条越长合并步骤越多,实践中会定期重做全量重开链条。
基本信息
| 适用平台 | MySQL 8.0 / Percona Server,配合 XtraBackup 8.x |
|---|---|
| 判定依据 | LSN:页面上的日志序列号,与上次备份的检查点比对 |
| 合并规则 | 全量与中间增量用 --apply-log-only,仅最后一步不带该参数 |
| 基础目录 | --incremental-basedir 必须指向链条中紧邻的上一次备份 |
| 周期建议 | 按备份窗口与合并耗时定,通常每周重做一次全量 |
典型使用场景
- 缩短备份窗口:日增量只传变化页,配合周全量控制总体时间
- 降低存储占用:增量体积远小于全量,适合多副本保留
- 频繁备份点:RPO 要求高时用短间隔增量,减少单次数据量
- 大库日常运维:全量放在周末,工作日只跑增量避免影响业务
- 灾备链管理:全量加增量形成可追溯的恢复链,配合目录登记
增量链的备份与合并顺序
增量链的备份与合并顺序
# 1) 全量备份完成后 prepare,并保留 redo 供后续合并
xtrabackup --backup --target-dir=/backup/xtra/full
xtrabackup --prepare --apply-log-only --target-dir=/backup/xtra/full
# 2) 基于全量做增量,basedir 指向紧邻的上一次备份
xtrabackup --backup --target-dir=/backup/xtra/inc1 --incremental-basedir=/backup/xtra/full
# 3) 合并增量:中间步骤加 --apply-log-only,最后一次不加
xtrabackup --prepare --apply-log-only --target-dir=/backup/xtra/full --incremental-dir=/backup/xtra/inc1
# 4) 合并完成后按普通全量执行 copy-back
xtrabackup --copy-back --target-dir=/backup/xtra/full链条管理要素
| 要素 | 正确做法 | 做错后果 |
|---|---|---|
| basedir 指向 | 紧邻的上一次备份目录 | 跳层备份 LSN 对不上,合并报错或数据缺失 |
| apply-log-only | 全量与中间增量都加,最后一步不加 | 顺序错误会污染全量副本,只能重做 |
| 链条长度 | 按周期重做全量重开链条 | 链条过长导致合并耗时长、单点风险集中 |
| 目录登记 | 记录每份增量所属的链条与位置 | 恢复时无法判断该取哪些增量 |
增量链越长,合并步骤越多、越容易出错;按周期(如每周)重做全量并重开链条,是控制复杂度的常规做法。
合并会修改全量备份目录:一旦中间步骤写错,受影响的是整条链。合并前后都要保留原始备份或在独立副本上操作。