六 备份

XtraBackup 是 Percona 开发的开源 MySQL 物理热备份工具,专为 InnoDB/XtraDB 存储引擎设计,同时兼容 MyISAM 引擎。

其核心优势在于支持在线热备份,无需停止数据库服务即可完成全量或增量备份,最小化对生产环境的影响。

该工具通过重放 InnoDB 事务日志(redo log)确保数据一致性,提供全量备份与增量备份两种模式,并集成压缩和加密功能以保障数据安全。

XtraBackup 的物理备份特性使其能够直接复制数据库文件,备份恢复速度极快,且占用磁盘空间较小。

1 备份流程

1.1 全量备份

  1. 复制已有的redo log,然后监听redo log变化并持续复制

  2. 复制事务引擎数据文件

  3. 等到数据文件复制完成

  4. 加锁:全局读锁

  5. 备份非事务引擎数据文件及其他文件

  6. 获取binlog点位信息等元数据

  7. 停止复制redo log

  8. 解锁:全局读锁

  9. 复制buffer pool dump

  10. 备份完成

XtraBackup基于InnoDB的crash recovery机制,在备份还原时利用redo log得到完整的数据文件,并通过全局读锁,保证InnoDB数据与非InnoDB数据的一致性,最终完成备份还原的功能。

2 常见问题

(Xtrabackup BUG和 MySQL 8.0.30 后新的 redo设计)[https://mp.weixin.qq.com/s/UNPzff-L1YDsXOd4woVizQ]

自从 8.0.30 及之后,redo 被分为 32 个文件放到了 #innodb_redo 中,控制 redo 大小的参数也变为innodb_redo_log_capacity 进行控制,因为 redo 的个数已经确认,因此只需要控制其总体大小即可。

设置 innodb_redo_log_capacity 后原有参数 innodb_log_files_in_group 和 innodb_log_file_size 将会被忽略。

若没设置 innodb_redo_log_capacity 计算方式为 innodb_log_files_in_group * innodb_log_file_size = innodb_redo_log_capacity

Last updated