xtrabackup原理2
XTRABACKUP备份原理实现细节——对淘宝数据库内核月报补充
前言
淘宝3月的数据库内核月报对xtrabackup的备份原理做了深入的分析,写的还是很不错。不过Inside君在看完之后,感觉没有对一个细节问题进行比较深入的介绍。而此问题可能会导致备份文件恢复后丢失相关数据,之前Inside君在MySQL 5.6对于Xtrabackup的影响一文中已经做了简单的说明,今天借着淘宝数据库内核组的文章再拿来提醒下各位小伙伴。Inside君还是先给出结论:尽可能地使用新版本Xtrabackup工具备份MySQL数据库。
正文
在淘宝数据库内核组的文章中写到Xtrabackup在备份结束时会按下面的步骤执行操作(有所简化,具体见原文):
- FLUSH TABLES WITH READ LOCK(FTWRL)
- 拷贝所有非事务表,如系统MyISAM表
- 拷贝重做日志
- UNLOCK TABLES
但是这里少了一个步骤,那就是在拷贝重做日志前,备份工具还会去执行如下操作,该操作会将InnoDB层的重做日志持久化到磁盘然后再进行拷贝:
FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS
这个细节非常关键,因为不执行该操作可能会导致备份丢失一部分的数据,然后再进行主从复制的话,同步可能报错。如果要分析原因,还是得从下面的提交过程图来看:

在上图显示的事务提交过程中,1这个步骤会进行一次fsync,确保日志落盘。但是从MySQL 5.6版本开始,已经不再需要2这个步骤执行fsync了,少了这样的I/O操作可以提升数据库的性能,而这对数据一致性是没有影响的,因此已经写入到二进制日志的事务在恢复的过程中一定是提交的。然而,问题在于Xtrabackup并不拷贝二进制日志。那么就有可能在恢复过程中存在下面的这种情况:

也就是说如果Xtrabackup备份的时候没有备份上图左边的最后一个InnoDB的commit log,这个事务在恢复的过程中就会丢失,简单来说就是数据丢失。Xtrabackup 2.2.3版本修复了此问题,具体可见:https://launchpad.net/percona-xtrabackup/2.2/2.2.3-ga
另外一个小细节是Xtrabackup备份是,如果数据库是Percona Server分支版本的话,那么其使用的不是FLUSH TABLE WITH READ LOCK来获取位置信息,这样的需要把表都关了,而且InnoDB表这时也将不可写入。因此Percona Server版本新增了两个新的命令LOCK TABLES FOR BACKUP和LOCK BINARY LOG FOR BACKUP,因此备份流程变为了:
LOCK TABLES FOR BACKUP
... copy .frm, MyISAM, CSV, etc. ...
LOCK BINLOG FOR BACKUP
UNLOCK TABLES
... get binlog coordinates ...
... wait for redo log copying to finish ...
UNLOCK BINLOG
按照上述逻辑实现的话,InnoDB表只会在备份的最后获取二进制日志位置时被锁住,相对原来的实现锁定的时间又有进一步的缩短,当然这取决于你非事务表的数量,如果全是InnoDB存储引擎用户表的话,那么提升也是有限的。
研究备份实现原理还是非常有意思的一件事情,比如增量备份的实现其实还存在另一些细节可挖掘。若有小伙伴想进一步掌握内部的实现原理,可以去GitHub上翻看下Xtrabackup的源码哦~~~
xtrabackup原理2的更多相关文章
- Xtrabackup原理及使用innobackupex进行MySQL数据库备份恢复
Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具. Xtrabackup中主要包含两个工 ...
- xtrabackup原理1
http://www.cnblogs.com/Amaranthus/archive/2014/08/19/3922570.html Percona XtraBackup User Manual 阅读笔 ...
- XtraBackup 原理与安装
简介 XtraBackup(PXB) 工具是 Percona 公司用 perl 语言开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle).Percona Server ...
- xtrabackup原理,整库,单表,部分备份恢复
物理备份xtrabackup原理 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle).Pe ...
- xtrabackup原理
常用命令 innobackupex --defaults-file=/data/mysql_3306/my.cnf --no-timestamp --slave-info --compress --c ...
- XtraBackup原理解读
XtraBackup是现今为止唯一一款为InnoDB 和XtraDB提供热备的开源工具,这个工具有以下的有点: (1)备份快速高效而且可靠 (2)备份过程可以做到事物处理不间断 (3)节省磁盘空间和网 ...
- XtraBackup原理3
http://mysql.taobao.org/monthly/2016/03/07/ MySQL · 物理备份 · Percona XtraBackup 备份原理 前言 Percona XtraBa ...
- mysql备份工具 :mysqldump mydumper Xtrabackup 原理
备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据(取决于备份周期),但至少能将损失降到最低.衡量备份恢复有两个重要的指标:恢复点目标(RPO)和恢复时间目标(R ...
- xtrabackup原理、备份日志分析、备份信息获取
一. xtrabackup备份恢复工作原理: extrabackup备份简要步骤 InnoDB引擎很大程度上与Oracle类似,使用redo,undo机制,XtraBackup在备份的时候,以read ...
随机推荐
- CodeForce---Educational Codeforces Round 3 D. Gadgets for dollars and pounds 正题
对于这题笔者无解,只有手抄一份正解过来了: 基本思想就是 : 二分答案,对于第x天,计算它最少的花费f(x),<=s就是可行的,这是一个单调的函数,所以可以二分. 对于f(x)的计算,我用了nl ...
- jquery阻止冒泡事件:$('span').bind("click",function(event){event.stopPropagation();})(有用源)
冒泡事件就是点击子节点,会向上触发父节点,祖先节点的点击事件. <body> <div id="content"> 外层div元素 <span> ...
- Android版本判断
尽管Android向下兼容不好,但是一个程序还是可以在多个平台上跑的.向下兼容不好,接口改变,新的平台上不能用旧的API,旧的平台更不可能用新的API,不等于一个平台需要一个APK.可以在高版本的SD ...
- hdfs[命令] dfsadmin
Usage: java DFSAdminNote: Administrative commands can only be run as the HDFS superuser. [-report] [ ...
- work_6
这次的作业是阅读C++11的新特性并提出问题,作为一个大部分代码都是用C++的基本语法并没有特别关注C++一代又一代新特性的学生来说,首先我阅读了一些关于新特性的文章.为了更快的理解,我首先选择了阅读 ...
- Android实例-调用系统APP(XE10+小米2)
相关资料:群号383675978 实例源码: unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, Sys ...
- AutoCAD.NET二次开发:创建自定义菜单(AcCui)
从CAD2007之后,Autodesk提供了一个新的程序集AcCui.dll,使用这个程序集,我们可以方便地做一些界面方面的操作,比如创建自定义菜单. 下面介绍一下菜单的创建过程: 1.在项目中添加引 ...
- [iOS基础控件 - 6.11.5] 沙盒 & 数据存储
A.沙盒 每个APP都有一个沙盒,是独立存在的 1.Xcode5和Xcode6的模拟器文件目录 a.模拟器路径改版 (1)Xcode5中模拟器路径为:/Users/用户名/Library/Appl ...
- Linux优化之IO子系统监控与调优
Linux优化之IO子系统 作为服务器主机来讲,最大的两个IO类型 : 1.磁盘IO 2.网络IO 这是我们调整最多的两个部分所在 磁盘IO是如何实现的 在内存调优中,一直在讲到为了加速性能,linu ...
- HDU 4052 Adding New Machine (线段树+离散化)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4052 初始给你w*h的矩阵,给你n个矩形(互不相交),按这些矩形尺寸把初始的矩形扣掉,形成一个新的'矩 ...