六 备份
XtraBackup 是 Percona 开发的开源 MySQL 物理热备份工具,专为 InnoDB/XtraDB 存储引擎设计,同时兼容 MyISAM 引擎。
其核心优势在于支持在线热备份,无需停止数据库服务即可完成全量或增量备份,最小化对生产环境的影响。
该工具通过重放 InnoDB 事务日志(redo log)确保数据一致性,提供全量备份与增量备份两种模式,并集成压缩和加密功能以保障数据安全。
XtraBackup 的物理备份特性使其能够直接复制数据库文件,备份恢复速度极快,且占用磁盘空间较小。
1 备份流程
1.1 全量备份
复制已有的redo log,然后监听redo log变化并持续复制
复制事务引擎数据文件
等到数据文件复制完成
加锁:全局读锁
备份非事务引擎数据文件及其他文件
获取binlog点位信息等元数据
停止复制redo log
解锁:全局读锁
复制buffer pool dump
备份完成
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