http://blog.csdn.net/wireless_tech/article/details/7332906
 

我们使用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的风险分析的更多相关文章

  1. FLUSH TABLES WITH READ LOCK

    最近在mysql主从复制中用到锁,翻了资料回忆一下.一下内容参考于:http://blog.csdn.net/arkblue/article/details/27376991 1.FLUSH TABL ...

  2. MySQL flush tables with read lock

    mysql> flush tables with read lock; flush tables with read lock 会去关闭已经打开的所有文件,它要做这个操作就先要拿到锁:当发起这个 ...

  3. FLUSH TABLES WITH READ LOCK 锁全局

    [root@wx03 ~]# cat a3.sh mysql -uroot -p1234567<<eof use scan; FLUSH TABLES WITH READ LOCK; sy ...

  4. FLUSH TABLES WITH READ LOCK 和 LOCK TABLES比较

    1.FLUSH TABLES WITH READ LOCK 这个命令是全局读锁定,执行了命令之后所有库所有表都被锁定只读.一般都是用在数据库联机备份,这个时候数据库的写操作将被阻塞,读操作顺利进行.解 ...

  5. FLUSH TABLES WITH READ LOCK 和 LOCK TABLES 之种种

    1.FLUSH TABLES WITH READ LOCK 这个命令是全局读锁定,执行了命令之后所有库所有表都被锁定只读.一般都是用在数据库联机备份,这个时候数据库的写操作将被阻塞,读操作顺利进行. ...

  6. FLUSH TABLES WITH READ LOCK 获取锁的速度

    最近有一台MySQL的从库老是报延迟,观察到:FLUSH TABLES WITH READ LOCK,阻塞了4个多小时,还有另外一条SQL语句select *,从现象上来看是select * 阻塞了f ...

  7. FLUSH TABLE WITH READ LOCK详解

    FLUSH TABLES WITH READ LOCK简称(FTWRL),该命令主要用于备份工具获取一致性备份(数据与binlog位点匹配).由于FTWRL总共需要持有两把全局的MDL锁,并且还需要关 ...

  8. flush table with read lock的轻量级解决方案[原创]

    为什么要使用FTWRL   MySQL dba在日常工作中,数据备份绝对是工作频度最高的工作内容之一.当你使用逻辑方式进行备份(mydumper,mysqldump)或物理方式进行备份(percona ...

  9. flush table with read lock的轻量级解决方案

    为什么要使用FTWRL   MySQL dba在日常工作中,数据备份绝对是工作频度最高的工作内容之一.当你使用逻辑方式进行备份(mydumper,mysqldump)或物理方式进行备份(percona ...

随机推荐

  1. PCB LDI 实现周期自动更新 实现思路

    一.基本思路整理如下: 二.封周期启动程序C#代码(部份代码) /// <summary> /// 单个生产型号 更新周期 /// </summary> /// <par ...

  2. Constructing Roads(spfa)

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2493 #include <stdio.h ...

  3. Python 40 数据库-外键约束 、多对一与多对多的处理

    mysql提供了 foreign key,专门用于为表和表之间 建立物理关联 思考 表里存储的是一条条的记录,两个表之间能产生的关系有哪些? 现有 A B两张表 1.多对一         2.一对一 ...

  4. 引入外部CSS的两种方式及区别

    1.CSS的两种引入方式 通过@import指令引入 @import指令是CSS语言的一部分,使用时把这个指令添加到HTML的一个<style>标签中: 要与外部的CSS文件关联起来,得使 ...

  5. Oracle 批量插入值

    工作中常遇到将Excel文档数据转为SQL语句,然后再将SQL语句插入到数据库已完成数据转移保存到数据库中,下面介绍下如何一次性插入多条SQL语句,先抛个图: 由于真实数据不变给大家看,所以这里是做了 ...

  6. Redis(二)-Win系统下安装

    下载地址:https://github.com/MSOpenTech/redis/releases. Redis 支持 32 位和 64 位.这个需要根据你系统平台的实际情况选择,这里我们下载 Red ...

  7. BZOJ 2101 DP+优化

    思路: http://www.cnblogs.com/exponent/archive/2011/08/14/2137849.html f[i,i+len]=sum[i,i+len]-min(f[i+ ...

  8. POJ 3264 线段树 ST

    题意:给你一个数列,从中挑一段,问你这段数的最大值减最小值是多少. 思路:线段树. // by Sirius_Ren #include <cstdio> #include <algo ...

  9. 2015 多校赛 第二场 1006 (hdu 5305)

    Problem Description There are n people and m pairs of friends. For every pair of friends, they can c ...

  10. windows phone传感器

    Windows phone中的传感器主要包括加速计传感器.罗盘传感器.陀螺仪传感器等 加速计传感器 Accelerometer类是加速传感器的接口,Accelerometer类位于Windows.De ...