XtraBackup 在 MySQL 备份场景中被广泛使用,大家一定不陌生。我们也在之前的两篇文章中分享了其备份的原理。(详见 [原理解析] XtraBackup全量备份还原 & [原理解析] XtraBackup增量备份还原

本文想要描述的是 XtraBackup 恢复时参数 apply-log-only 的作用,不知道大家有没有注意到,这个参数如果不设置,可能会产生数据不一致的惨剧。

使用 XtraBackup 对数据库做备份,实际上就是拷贝 MySQL 的数据文件,为了保证备份数据的最终一致,也会同时拷贝备份过程中的 Redo log。

如图 1 所示,全备开始时,事务 2 尚未提交,Redo log 中仅有事务 2 的一部分数据(B->F),XtraBackup 于是将这一部分数据拷贝到全备文件中。

如图 2 所示,增备开始时,事务 2 已经提交,Redo log 中有了事务 2 的完整数据。XtraBackup 于是将事务 2 的后一部分数据拷贝了下来。

如图 3 所示,恢复时,首先恢复全备中的数据文件,然后回放全备中的 Redo log,回放过程中应用了一部分事务 2(B->F),如果没有设置 apply-log-only,XtraBackup 会在恢复最后一步应用 undo,将这一部分残缺的事务回滚(F->B),就此埋下了祸根。

如图 4 所示,后续恢复增备文件时,继续回放了事务 2 的后一部分(E->G A->H),导致最终的数据文件中丢失了事务 2 第一部分的数据(B->F),惨剧就发生了。

如图 5 所示,正确的做法应该是除了最后一个增备,所有的备份恢复都应该设置 apply-log-only 参数(only 指的就是只回放 redo log 阶段,跳过 undo 阶段),避免未完成事务的回滚。如图所示,此时全备恢复后的数据文件才是完整的(包含了B->F)。所有增备恢复完成后的数据也是完整的。

参考:
https://www.percona.com/doc/percona-xtrabackup/2.3/xtrabackup_bin/xbk_option_reference.html#cmdoption-xtrabackup-apply-log-only

社区近期动态

No.1

10.26 DBLE 用户见面会 北京站

爱可生开源社区将在 2019 年 10 月 26 日迎来在北京的首场 DBLE 用户见面会,以线下互动分享的会议形式跟大家见面。

时间:10月26日 9:00 – 12:00 AM

地点:HomeCafe 上地店(北京市海淀区上地二街一号龙泉湖酒店对面)


重要提醒:

1. 同日下午还有 dbaplus 社群举办的沙龙:聚焦数据中台、数据架构与优化。

2. 爱可生开源社区会在每年10.24日开源一款高质量产品。本次在 dbaplus 沙龙会议上,爱可生的资深研发工程师闫阿龙,将为大家带来《金融分布式事务实践及txle概述》,并在现场开源。

No.2

Mycat 问题免费诊断

诊断范围支持:

Mycat 的故障诊断、源码分析、性能优化

服务支持渠道:

  1. 技术交流群,进群后可提问

    QQ群(669663113)

  2. 社区通道,邮件&电话

    osc@actionsky.com

  3. 现场拜访,线下实地,1天免费拜访

关注“爱可生开源社区”公众号,回复关键字“Mycat”,获取活动详情。

No.3

社区技术内容征稿

征稿内容:

  1. 格式:.md/.doc/.txt

  2. 主题:MySQL、分布式中间件DBLE、数据传输组件DTLE相关技术内容

  3. 要求:原创且未发布过

  4. 奖励:作者署名;200元京东E卡+社区周边

投稿方式:

  1. 邮箱:osc@actionsky.com

  2. 格式:[投稿]姓名+文章标题

  3. 以附件形式发送,正文需注明姓名、手机号、微信号,以便小编及时联系