技术分享 | Xtrabackup 不备份 binlog 怎么保证一致性?

博客探讨了Xtrabackup在备份时如何确保数据和binlog位点一致性,以及在恢复过程中为何不需要处理prepare状态的事务,从而避免备份binlog的必要性。

作者:胡呈清

爱可生 DBA 团队成员,擅长故障分析、性能优化,个人博客:https://www.jianshu.com/u/a95ec11f67a8,欢迎讨论。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


公司大佬出的考核题中有个有意思的问题:

已知:MySQL 的内部两阶段提交,是为了解决 binlog 和 redo log 的一致性(在 crash recovery 的过程中, 如果发现某个事务的 redo log 已经完成 prepare 阶段, 但未完成 commit,那么会验证该事务是否在 binlog 中,如存在,则进行提交,否则进行回滚)。

又已知:Xtrabackup 在恢复备份后,会进行类似于 crash recovery 的动作(将备份的 redo log 的内容回放到数据中, 并对事务进行提交/回滚),那么 Xtrabackup 为什么不需要备份 binlog 文件?

想了一下好像不是能一句话说清楚的,我来尝试解答下。

答:

备份时全局锁阶段做的操作:

2020-08-17T09:58:36.167905+08:00         2116 Query     FLUSH TABLES WITH READ LOCK
2020-08-17T09:58:36.490928+08:00         2116 Query     SHOW VARIABLES
2020-08-17T09:58:36.498670+08:00         2116 Query     SHOW SLAVE STATUS
2020-08-17T09:58:36.499435+08:00         2116 Query     SHOW MASTER STATUS
2020-08-17T09:58:36.499747+0
### ### 增量备份原理 Percona XtraBackup 通过记录数据库的 redo log(重做日志)来实现增量备份。每次执行增量备份时,它会基于前一次全量备份或增量备份的日志序列号(LSN)进行差异数据捕获,从而减少备份数据量和网络带宽消耗[^1]。 ### ### 环境准备 在执行增量备份之前,需要确保以下条件满足: - 已安装 Percona XtraBackup 并配置好 MySQL 环境 - 数据库版本支持热备份功能 - 配置文件 `/etc/my.cnf` 中包含必要的连接参数,例如主机、端口、用户、密码以及目标目录等[^3] - 用户具备 `BACKUP_ADMIN` 权限,用于执行备份操作[^2] ### ### 执行全量备份 在首次使用 Percona XtraBackup 进行增量备份前,必须先完成一次全量备份。示例命令如下: ```bash xtrabackup --backup --target-dir=/data/backup/base ``` 该命令将创建一个基础备份目录 `/data/backup/base`,其中包含完整的数据库快照数据[^3]。 ### ### 第一次增量备份 在完成全量备份后,可以使用以下命令进行第一次增量备份: ```bash xtrabackup --backup --target-dir=/data/backup/inc1 --incremental-basedir=/data/backup/base ``` 此命令指定 `--incremental-basedir` 参数指向全量备份目录 `/data/backup/base`,表示此次备份是基于该全量备份的增量数据[^1]。 ### ### 后续增量备份 如需继续执行后续增量备份,只需将 `--incremental-basedir` 指向前一次增量备份的目录即可。例如第二次增量备份命令如下: ```bash xtrabackup --backup --target-dir=/data/backup/inc2 --incremental-basedir=/data/backup/inc1 ``` 通过这种方式,可以形成一个完整的增量链,从全量备份开始,依次叠加多个增量备份。 ### ### 备份验证与恢复准备 每次备份完成后,建议使用 `--prepare` 命令对备份数据进行预处理,以确保其可用于恢复。例如: ```bash xtrabackup --prepare --apply-log-only --target-dir=/data/backup/base xtrabackup --prepare --apply-log-only --target-dir=/data/backup/base --incremental-dir=/data/backup/inc1 xtrabackup --prepare --target-dir=/data/backup/base --incremental-dir=/data/backup/inc2 ``` 上述命令中,`--apply-log-only` 表示只应用日志而提交最终事务,适用于多阶段增量恢复场景。最后一步无需添加 `--apply-log-only`,以确保数据一致性。 ### ### 恢复数据库 完成所有备份的预处理后,可将数据恢复到原始数据库目录。请确保 MySQL 服务已停止,并执行以下命令: ```bash xtrabackup --copy-back --target-dir=/data/backup/base ``` 该命令将处理后的备份数据复制回 MySQL 的数据目录中。恢复完成后,需修改文件权限并重启 MySQL 服务[^1]。 ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值