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 ...
随机推荐
- js代码大全(里面啥都有)
事件源对象event.srcElement.tagNameevent.srcElement.type 捕获释放event.srcElement.setCapture(); event.srcElem ...
- 【跟我一起学Python吧】python with statement 进阶理解
由于之前有一个项目老是要打开文件,然后用pickle.load(file),再处理...最后要关闭文件,所以觉得有点繁琐,代码也不简洁.所以向python with statement寻求解决方法.以 ...
- Hard-Margin SVM(支持向量机)
什么是Hard-Margin SVM?指的是这个向量机只适用于“数据完全可分(seperately)”的情况. (一)什么是支持向量机? 上述三条直线,选择哪一条比较好?直觉上来说,最右面的那条直线最 ...
- Codeforces Round #364
http://codeforces.com/contest/701 A - Cards 水 // #pragma comment(linker, "/STACK:102c000000,102 ...
- Tkinter教程之Frame篇
本文转载自:http://blog.csdn.net/jcodeer/article/details/1811339 '''Tkinter教程之Frame篇'''#Frame就是屏幕上的一块矩形区域, ...
- JAVA与数据库开发(JDBC-ODBC、SQL Server、MySQL)
1)配置数据库环境和驱动 2)设计数据库结构并创建数据库 3)对数据库进行增删改查操作...
- 使用MATLAB生成模糊控制的离线查询表
1.打开模糊控制工具箱,编辑输入输出变量的隶属度函数和模糊控制规则,如下图所示,导出为fuzzy_control.fis文件. 2.打开Simulink模块,建立下图所示的系统框图,两输入,一输出,处 ...
- 《Genesis-3D开源游戏引擎-官方录制系列视频教程:进阶实例篇》
注:本系列教程仅针对引擎编辑器:v1.2.2及以下版本 G3D进阶实例 第四课<2D编辑与脚本的统一入口> 使用G3D完成一个简单的类飞机大战游戏,介绍了G3D2d游戏制作的流程包括: ...
- MLlib 中的聚类和分类
聚类和分类是机器学习中两个常用的算法,聚类将数据分开为不同的集合,分类对新数据进行类别预测,下面将就两类算法进行介绍. 1. 聚类和分类(1)什么是聚类 聚类( Clustering)指将数据对象分组 ...
- Struts2通配符映射
1.一个Web 应用可能有成百上千个 action 声明. 可以利用 struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系 2.通配符映射规则 –若找到多个匹配, 没有通配符的 ...