首页/数据/备份与容灾速查/XtraBackup 物理恢复 copy-back
数据库与云备份56 条

XtraBackup 物理恢复 copy-back

把 prepare 完成的备份回灌数据目录:--copy-back 复制、--move-back 移动,修正属主后启动实例;是物理备份恢复的标准落地步骤。

备份与容灾速查数据更新于 2026-10-13

XtraBackup 物理恢复是什么

XtraBackup 的备份目录不能直接拷回数据目录就用:先要执行 prepare,把备份期间产生的 redo 日志应用进去、回滚未提交事务,得到一个可启动的数据目录;之后再用 --copy-back 或 --move-back 把文件回灌到 datadir,修正属主后启动实例。这一套是 MySQL 物理备份恢复的标准落地步骤。

基本信息

适用平台MySQL 8.0 / Percona Server,配合 XtraBackup 8.x 版本线
两阶段prepare(应用 redo、回滚未提交事务)→ copy-back / move-back(回灌数据目录)
copy-back 与 move-backcopy-back 保留备份目录原样可重复使用;move-back 移动文件,适合空间紧张且不保留备份
前提条件目标 datadir 为空、实例已停止、my.cnf 中的 datadir 路径与恢复目标一致

典型使用场景

  • 整实例灾难恢复:磁盘损坏后用最近一次物理备份重建数据目录
  • 备份校验:在隔离环境 copy-back 后启动实例,验证备份真的可用
  • 快速版本回退:升级失败时用升级前的物理备份回灌
  • 大库迁移:物理副本搬运比逻辑导出导入更快
  • 增量链恢复:全量 prepare 后依次应用增量备份,再回灌数据目录

物理恢复标准步骤

物理恢复标准步骤
# 1) 停实例,避免数据目录被占用
systemctl stop mysqld                 # 或用 mysqladmin shutdown
# 2) 确认备份已 prepare 完成,再核对备份目录里的检查点信息
cat /backup/xtra/full/xtrabackup_checkpoints
# 3) 严格确认备份可用后清空数据目录(不可逆,先确认再执行)
find /var/lib/mysql -mindepth 1 -delete
# 4) 回灌备份文件并修正属主
xtrabackup --copy-back --target-dir=/backup/xtra/full
chown -R mysql:mysql /var/lib/mysql
# 5) 启动实例并做完整性检查
systemctl start mysqld && mysqlcheck -u root -p --all-databases

xtrabackup_checkpoints 读法

字段含义正常/异常
backup_type备份类型:full 全量、incremental 增量增量未按顺序 prepare 就回灌会得到不完整数据
from_lsn / to_lsn备份覆盖的日志序列号区间区间与全量备份对不上说明链条不连续
last_lsnprepare 时应用到的最终日志位点明显小于 to_lsn 说明还有日志未应用
recover_binlog_info备份结束时记录到的 binlog 位点用于恢复后重建复制关系,缺失时需另找位点
恢复后要重建复制关系:位点可从备份目录中的 binlog 信息文件读取,并与主库当前的 GTID 状态对齐后再启动复制线程。
清空数据目录是不可逆动作。执行前必须确认备份已 prepare 成功且文件完整,最好先把现有数据目录改名保留一段时间。

易错点

  • 忘记 chown -R mysql:mysql:属主错误导致实例启动失败,报错信息往往指向权限而非数据本身
  • 清空数据目录前未验证 prepare 成功:恢复失败时既没有新数据也没有旧数据,失去回退空间
  • 未 prepare 直接 copy-back:数据目录缺少日志应用与事务回滚,实例无法正常启动
  • 恢复后未重建复制关系:备节点脱离拓扑单点运行,再次故障时无副本可用

数据来源与参考

  • Percona XtraBackup 文档(Restore backups)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌