mysqldump中使用flush tables with read lock的风险分析
我们使用mysqldump --single-transaction --master-data=2来得到数据一致性的备份,其中,--master-data=2会告诉mysqldump在备份事务开启前,先获取一个全局读锁(该锁会阻塞所有的write操作),然后开启事务,并使用show master status来获取当前的binlog文件和位置,以下是开启了mysqld的通用日志general-log情况下,上述mysqldump工具给 mysqld发出的命令:
2 Query FLUSH TABLES
2 Query FLUSH TABLES WITH READ LOCK
2 Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
2 Query START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */
2 Query SHOW MASTER STATUS
2 Query UNLOCK TABLES
单纯地使用mysqldump --single-transaction,是没有粗体的三条命令的,其中的--master-data=2参数,是为了获得备份时间点的binlog文 件和位置(出于后续结合binlog恢复数据的需要),这里讨论的是flush tables with read lock这个全局读锁的影响范围。
ben推荐了一篇关于flush tables with read lock的文章,http://www.mysqlperformanceblog.com/2010/04/24/how-fast-is- flush-tables-with-read-lock/,提到了该语句的风险,在测试环境的测试如下:
1.测试表:
t1表 innodb引擎 20000000行,含c1,c2,c3三列,无索引
t2表 innodb引擎 0行 ,含c1,c2两列
2.测试过程
第一个mysql console:执行select * from t1 where c1 = 'felix';# 该语句返回需要59秒
第二个mysql console:执行FLUSH TABLES WITH READ LOCK; # 该语句获取全局锁,但现在阻塞,因为第一个console还未返回,该语句等待获得全局读锁
第三个mysql console:执行insert into t2 values(1,'felix'); # 该语句阻塞,等待第二个console的返回,注意,这里操作的是t2表,而不是t1表
3.测试结论
从2得出,即使flush tables with read lock语句还没成功获得全局锁,也会阻塞后续其他线程的任何写操作,这个结论与 http://www.mysqlperformanceblog.com/2010/04/24/how-fast-is-flush-tables-with-read-lock/ 开发者Baron的分析一致。
而从mysqldump给mysqld发送的sql分析来看,开发者应该已经意识到了直接用flush tables with lock导致的锁等待问题,所以先做了flush tables,再做flush tables with read lock,显然,这种处理方式会较大程度的规避锁等待,但严谨一点来看,如果在两个语句之间,另外的进程执行了一个耗时的select操作,依然有可能会 导致flush table with read lock的等待,从而阻塞其他人对DB的写访问。
Baron说可能可以从innodb的redo log中得到binlog的文件和位置,如果找到该方法,就可以去掉flush tables with read lock的语句,减少备份导致的锁问题!
本文原创自无线技术运营空间: http://wireless.qzone.qq.com 及 http://blog.csdn.net/wireless_tech (专注无线技术运营——无线技术(操作系统/数据库/WEB前端/负载均衡/系统容灾/系统安全/短信接入/WAP接入/3G等)、无线业务运营、无线开放平台、统计分析(用户行为分析/数据挖掘)、CP合作,联系我们:1780551083@qq.com)
mysqldump中使用flush tables with read lock的风险分析的更多相关文章
- FLUSH TABLES WITH READ LOCK
最近在mysql主从复制中用到锁,翻了资料回忆一下.一下内容参考于:http://blog.csdn.net/arkblue/article/details/27376991 1.FLUSH TABL ...
- MySQL flush tables with read lock
mysql> flush tables with read lock; flush tables with read lock 会去关闭已经打开的所有文件,它要做这个操作就先要拿到锁:当发起这个 ...
- FLUSH TABLES WITH READ LOCK 锁全局
[root@wx03 ~]# cat a3.sh mysql -uroot -p1234567<<eof use scan; FLUSH TABLES WITH READ LOCK; sy ...
- FLUSH TABLES WITH READ LOCK 和 LOCK TABLES比较
1.FLUSH TABLES WITH READ LOCK 这个命令是全局读锁定,执行了命令之后所有库所有表都被锁定只读.一般都是用在数据库联机备份,这个时候数据库的写操作将被阻塞,读操作顺利进行.解 ...
- FLUSH TABLES WITH READ LOCK 和 LOCK TABLES 之种种
1.FLUSH TABLES WITH READ LOCK 这个命令是全局读锁定,执行了命令之后所有库所有表都被锁定只读.一般都是用在数据库联机备份,这个时候数据库的写操作将被阻塞,读操作顺利进行. ...
- FLUSH TABLES WITH READ LOCK 获取锁的速度
最近有一台MySQL的从库老是报延迟,观察到:FLUSH TABLES WITH READ LOCK,阻塞了4个多小时,还有另外一条SQL语句select *,从现象上来看是select * 阻塞了f ...
- FLUSH TABLE WITH READ LOCK详解
FLUSH TABLES WITH READ LOCK简称(FTWRL),该命令主要用于备份工具获取一致性备份(数据与binlog位点匹配).由于FTWRL总共需要持有两把全局的MDL锁,并且还需要关 ...
- flush table with read lock的轻量级解决方案[原创]
为什么要使用FTWRL MySQL dba在日常工作中,数据备份绝对是工作频度最高的工作内容之一.当你使用逻辑方式进行备份(mydumper,mysqldump)或物理方式进行备份(percona ...
- flush table with read lock的轻量级解决方案
为什么要使用FTWRL MySQL dba在日常工作中,数据备份绝对是工作频度最高的工作内容之一.当你使用逻辑方式进行备份(mydumper,mysqldump)或物理方式进行备份(percona ...
随机推荐
- RMAN异机恢复实验---转载
一.RMAN异机恢复实验 2011年3月23日00:44 1.环境介绍: 主机1: 操作系统 REDHAT5.5 IP地址 172.16.1.120 主机名 sigle 数据库版本 10.2.0.4 ...
- bzoj 1059 [ ZJOI 2007 ] 矩阵游戏 —— 二分图匹配
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1059 每一列选出一个占据一行才可以: 挫败. 代码如下: #include<iostr ...
- Coursera Algorithms week2 基础排序 练习测验: Permutation
题目原文: Given two integer arrays of size n , design a subquadratic algorithm to determine whether one ...
- 关于类和对象的进一步讨论之析构函数 C++
析构函数也是一个特殊的成员函数.它的作用与构造函数相反.它的名字是在类名的前面加一个“~”符号.在C++中“~”是位取反运算符.当对象的生命结束时,会自动执行解析函数.以下几种情况会执行析构函数: 1 ...
- Area(pick定理)
http://poj.org/problem?id=1265 题意:起始为(0,0),给出每个点的偏移量,求依次连接这些点形成的多边形边界上格点的个数. 思路:先将各个点的坐标求出存入,由pick定理 ...
- C/C++中的位运算符
--------开始-------- 我自己都记不住这是第几次把这几个位运算符搞混了,刚好在刚用过来把这几个位运算符记下来,俗话说的好好记性不如个烂笔头. 运算符: 与 或 ...
- Oracle_exp/expdp备份
目录索引 1.exp和expdp的区别 2.expdp导出数据库流程 一.↓↓exp和expdp的区别↓↓ 1.exp和expdp最明显的区别就是导出速度的不同.expdp导出是并行导出(如果把exp ...
- ROS-URDF-活动关节
前言:介绍活动关节,并使机器人活动起来. 参考自:http://wiki.ros.org/urdf/Tutorials/Building%20a%20Movable%20Robot%20Model%2 ...
- YOLO (You Only Look Once)
YOLO (You Only Look Once) dl cnn object detection 一.YOLO YOLO是一个实时的目标检测系统.最新的V2版本在Titan X 上可以每秒处理 ...
- I2C controller core之Bit controller(01)
FPGA proven, AISC proven, I2C controller core from OpenCores http://opencores.org/project,i2c Bit-co ...