prepare 是什么
prepare 是恢复前的必做步骤:xtrabackup --prepare 在备份副本上重放 redo,把数据文件推进到一致状态——已提交事务前滚、未提交事务回滚。全备和增量链都要 prepare,而且除最后一步外都要带 --apply-log-only,否则未完成的事务会被提前回滚,后续增量就无法继续叠加。
基本信息
| 版本对应 | Percona XtraBackup 8.0 对应 MySQL 8.0,版本必须匹配 |
|---|---|
| 全备恢复 | xtrabackup --prepare --target-dir=备份目录 |
| 增量链 | 每一步都用 --apply-log-only,仅最后一步不使用 |
| 耗时特征 | 与需回放的 redo 量成正比 |
| 执行位置 | 在备份副本上做,不要直接跑生产库 |
典型使用场景
- 全备恢复前:先把备份 prepare 到一致状态再拷回数据目录
- 增量链叠加:base 先 apply-log-only,再逐个叠加增量目录
- 恢复演练:定期在测试环境完整走一遍,验证备份真的能恢复
- 迁移到新实例:prepare 后 copy-back 到新机器再启动
- 可恢复性巡检:抽查备份目录能否顺利完成 prepare
- 时间评估:用 prepare 耗时推算故障时的实际恢复窗口
全备与增量链 prepare
全备与增量链 prepare
# 1) 全备先 prepare 但不做最终回滚
xtrabackup --prepare --apply-log-only --target-dir=/data/backup/base
# 2) 依次叠加增量(同样 apply-log-only)
xtrabackup --prepare --apply-log-only --target-dir=/data/backup/base \
--incremental-dir=/data/backup/inc1
xtrabackup --prepare --apply-log-only --target-dir=/data/backup/base \
--incremental-dir=/data/backup/inc2
# 3) 最后一个增量叠加完成后,再做一次不带 apply-log-only 的 prepare
xtrabackup --prepare --target-dir=/data/backup/base
# 4) 拷贝回数据目录(实例必须已停止)
xtrabackup --copy-back --target-dir=/data/backup/base
chown -R mysql:mysql /var/lib/mysql步骤要点
| 步骤 | 关键选项 | 做错的后果 |
|---|---|---|
| 全备 prepare | --apply-log-only | 去掉 only 会提前回滚,增量无法叠加 |
| 增量叠加 | 按时间顺序逐个 --incremental-dir | 顺序错乱会得到不一致的数据 |
| 最后一步 | 不带 --apply-log-only | 保持 only 则未完成事务未回滚,实例可能起不来 |
| 拷贝回目录 | --copy-back,实例已停止 | 实例在跑时拷回会破坏数据文件 |
prepare 过程会产生大量 IO,建议在恢复环境或专门机器上做,避免影响生产。
备份目录里的位点信息文件记录了备份结束时的 binlog 位点或 GTID 集合,重建复制时用它作为起点,配合增量备份可以缩短追赶时间。
prepare 完成后建议先 copy-back 到测试实例启动验证,确认数据可用再动生产;把「备份到恢复成功」的完整时间算进 RTO,而不是只统计备份耗时。