Skip to main content
Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

XtraBackup 基础教程

覆盖:核心原理、备份类型、使用方法、恢复流程、性能优化、与 mysqldump/mydumper 对比、生产最佳实践。

🧱 1. XtraBackup 是什么?

XtraBackup(Percona XtraBackup) 是 MySQL / MariaDB 最专业的 物理热备工具,支持 InnoDB 的 无锁备份(hot backup),企业生产最常用。

特点:

  • 物理备份(拷贝数据文件,而不是导出 SQL)
  • 不阻塞读写(hot backup)
  • 支持 全备、增量备份、差异备份
  • 备份速度极快(文件级别)
  • 支持 redo + undo 恢复一致性
  • 可用于 MySQL、Percona Server、MariaDB

🔥 XtraBackup 可认为是 MySQL 物理备份的工业标准。

🧱 2. 适用场景(企业常用)

  • 在线备份,不中断业务
  • 数据库超过 50GB、100GB、甚至数 TB
  • MHA / MGR / PXC 集群节点复制
  • 做从库、延迟库
  • 自动备份脚本
  • 灾难恢复(DR)

如果你是运维 / DBA,在企业里基本离不开它。

🧱 3. 核心原理(回复2深度内容融合)

XtraBackup 的原理基于:

(1)拷贝 InnoDB 表空间/日志文件(物理方式)

逐文件复制:

ibdata1
*.ibd
redo log
undo log

(2)MVCC + redo log 保证一致性

备份过程中:

  1. 拷贝文件
  2. 同时记录 redo log
  3. 最后通过 xtrabackup –prepare 应用 redo,使数据达到统一时间点的 crash-consistent 状态

类似 MySQL 在崩溃恢复时的 redo 回放。

(3)对 MyISAM 需要短暂表锁

因为 MyISAM 没有 MVCC,只能锁表保证一致性。

🧱 4. XtraBackup 备份类型(完整)

类型 说明 是否锁表
完全备份(Full Backup) 拷贝全部数据文件 不锁 InnoDB
增量备份(Incremental) 仅备份比上次备份更新的页面 不锁 InnoDB
差异备份(Differential) 基于最近一次完全备份的差异 不锁 InnoDB
流备份(Stream Backup) 备份并通过管道输出(如 .xbstream) 不锁
备份压缩 使用 qpress/zstd 不锁

🧱 5. 基础使用(最常用命令)

5.1 完全备份

xtrabackup --backup \
--target-dir=/data/backup/full_2025_01_01

5.2 增量备份

xtrabackup --backup \
  --target-dir=/backup/inc1 \
  --incremental-basedir=/backup/full_2025_01_01

5.3 合并增量(prepare)

必须执行 prepare 才能恢复。

xtrabackup --prepare \
  --target-dir=/backup/full_2025_01_01

反复 prepare 合并增量:

xtrabackup --prepare \
  --target-dir=/backup/full_2025_01_01 \
  --incremental-dir=/backup/inc1

5.4 恢复(restore)

systemctl stop mysql

rsync -avP /backup/full_2025_01_01/ /var/lib/mysql/

chown -R mysql:mysql /var/lib/mysql/

systemctl start mysql

🧱 6. 备份流程图(增强说明)

Backup Stage:

  1. 拷贝数据文件
  2. 拷贝 redo
  3. 生成 xtrabackup_logfile(保证一致性)

Prepare Stage:

  1. 回放 redo
  2. 清理未提交事务
  3. 生成 crash-consistent 数据包

prepare 过程是 XtraBackup 的核心。

🧱 7. XtraBackup 备份 + 恢复完整流程(企业常用)

(1)完全备份

xtrabackup --backup --compress --target-dir=/backup/full

(2)增量备份

每天做:

xtrabackup --backup --incremental --incremental-basedir=/backup/full --target-dir=/backup/inc1

(3)prepare(多次 prepare 合并)

xtrabackup --prepare --apply-log-only --target-dir=/backup/full
xtrabackup --prepare --apply-log-only --target-dir=/backup/full --incremental-dir=/backup/inc1
xtrabackup --prepare --target-dir=/backup/full

(4)恢复

rsync -avP /backup/full/ /var/lib/mysql/

🧱 8. 性能优化(重要)

8.1 提升备份速度

  • 使用 SSD(极大提升)
  • 增大 –parallel=4/8/16
  • 使用 –compress + zstd(压缩极快)
  • 使用 –encrypt(需要安全性时)

示例:

xtrabackup --backup --parallel=8 --compress --compress-threads=8

✔ 8.2 提升恢复速度

  • prepare 时增加并行度:

    --prepare --parallel=8
    
  • 恢复时使用 rsync 替代 cp

🧱 9. XtraBackup vs mysqldump / mydumper(深度对比)

工具 类型 速度 一致性 锁表 恢复速度
XtraBackup 物理 极快 无锁(InnoDB) 极快
mysqldump 逻辑 需加锁 锁表
mydumper 逻辑多线程 中等~快 可快照 无锁 中等

结论:

  • 大型数据库(>50GB) -> XtraBackup
  • 中小规模,需迁移到不同版本 -> mydumper
  • 仅导数据结构或小数据 -> mysqldump

🧱 10. XtraBackup 的问题与注意事项

⚠️ 10.1 MySQL 8.0 与 XtraBackup 兼容性要严格

XtraBackup 与 MySQL版本强相关:

MySQL 版本 XtraBackup 版本
MySQL 8.x Percona XtraBackup 8.x
MySQL 5.7 XtraBackup 2.4

不能混用。

⚠️ 10.2 加密备份需要 key 文件

xtrabackup --backup --encrypt=AES256 --encrypt-key=mykey

⚠️ 10.3 prepare 必须成功,否则无法恢复

  • prepare 会回放 redo
  • prepare 失败 = 备份无效(非常关键)

🧱 11. 企业级最佳实践(重点)

11.1 每天至少一次完全备

11.2 增量备份最长不要超过 7 天

链太长 prepare 时间巨大

11.3 用脚本自动化(可提供脚本模板)

  • 自动备份
  • 自动 prepare
  • 自动推送到对象存储(OSS/OBS/S3)
  • 自动校验

11.4 每周做恢复演练(非常重要)

备份不演练 = 等于没有备份

11.5 配合 binlog 实现 point-in-time recovery(PITR)

完整恢复策略:

全备 -> 增量 -> binlog replay(point-in-time)

🧱 12. 最终总结(极速复盘)

  • XtraBackup 是 MySQL 的热备神器
  • 支持完整、增量、流式备份
  • prepare 才能让备份可恢复
  • 恢复极快
  • MySQL 8 需使用 Percona XtraBackup 8
  • 大型数据库强烈推荐 XtraBackup + binlog 的方案
  • 企业必须搭配自动化脚本与定期恢复演练