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