Xtrabackup介绍

举报
kfpanda 发表于 2018/03/02 17:42:42 2018/03/02
【摘要】 1 介绍Percona Xtrabackup是目前比较流行的MySQL热备份工具。其工具集中包括innobackupex、xbcrypt、xbstream、xtrabackup等。比较常用的就是innobackupex和xtrabackup。在2.3版本之前innobackupex是一个perl脚本,其封装了xtrabackup。从2.3版本开始这个脚本的所有功能都在xtrabackup

1      介绍

Percona Xtrabackup是目前比较流行的MySQL热备份工具。其工具集中包括innobackupexxbcryptxbstreamxtrabackup等。比较常用的就是innobackupexxtrabackup。在2.3版本之前innobackupex是一个perl脚本,其封装了xtrabackup。从2.3版本开始这个脚本的所有功能都在xtrabackupC程序中实现了,为了向前兼容2.3版本开始innobackupex是一个指向xtrabackup的软连接,并且支持其在2.2版本中的所有特性和语法,在后面的主版本中可能会去掉。

2      Xtrabckup流程介绍

下图是2.3版本的被流程(因为innobackup在这个版本里只是Xtrabackup的一个软连接,图中只展示了Xtrabackup)。

截图.PNG

3      2.2.3版本之前的一个问题

Xtrabackup2.2.3版本之前有一个bug,备份出来的数据库是一致的,没有问题,但是可能会导致备份出来的数据库与binlog位置不一致。当使用binlog的位置的话,会引入一些问题。

https://bugs.launchpad.net/percona-xtrabackup/+bug/1320685

    这个问题是在MySQL5.6的一次代码优化后Xtrabackup才有的。关于事物提交,InnoDB存储引擎层对每个事物进行prepare操作,都需要进行一次fsync操作,以便保证事物的prepare日志写入到了redo日志中。然后,一个组提交中的事物依次向MySQL的二进制日志写日志,这个写操作是缓存写,最后完成一fsync操作。即一个fsync将多个事物的日志写入到了二进制日志,也就是我们通常说的组提交。最后完成InooDB引擎层面的提交操作。5.6的一个优化就是InnoDB引擎层的提交不再进行fsync。

  因为即使InnoDB引擎层的提交操作丢失了,这个事物要做的事情基本已经完成。由于binlog日志已经写入且已经fsync,再恢复时,只需要从binlog中判断最后的事物是提交还是回滚就可以。

  但是对于Xtrabackup是个问题,因为事物最后的提交不再需要fsync,那么其redo日志中可能还没有提交记录。而Xtrabackup对于InnoDB的恢复只是通过redo日志重放来实现。这样,Xtrabackup备份出来的InnoDB数据文件虽然还是一致的,但是数据与binlog的位置可能不一致。那么当要用这个位置时可能会出错,比如搭建从库。

  Xtrabackup在2.2.3版本中解决了这个问题,解决方法也很简单,就是在"完成redo拷贝"前“同步redo到磁盘”。在上图中可以看到,同步redo到磁盘的操作位置。

  


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。