mysqldump主要参数探究

在数据库的日常维护中,对于数据量小的备份,我们常常采用的是逻辑备份,也就是使用mysqldump导出。数据量比较大的备份会使用percona的xtrabackup,关于xtrabackup工具的使用以及原理请参考我前面的文章xtrabackup详解,当然还有其他的方法。现在我们主要来深入看看mysqldump几个比较常用参数的原理。要需要了解mysqldump各种参数做了什么,我们需要打开查询日志来分析,打开查询日志很简单,在[mysqld]段落添加如下参数:

general_log=. row ) )  row . row ) )  row  Query     SHOW TABLES  Query     LOCK TABLES `tb2`  Query     show  Query     
                     Query      Query     show  Query      Query     show fields  Query      Query      Query      Query      Query     SHOW TRIGGERS  Query      Quit

可以看见不加任何参数,自动加上了LOCK TABLES READ LOCAL锁,,该锁不会阻止读,也不会阻止新的数据插入。所以不加参数的dump是非常danger。

Query SHOW TABLES Query LOCK TABLES `tb2` Query show Query Query Query show Query Query show fields Query Query Query Query Query SHOW TRIGGERS Query Quit

跟默认不加参数是一样的,了LOCK TABLES READ LOCAL锁,,该锁不会阻止读,也不会阻止新的数据插入。

Query FLUSH TABLES Query SHOW TABLES Query show Query Query Query show Query Query show fields Query Query Query Query Query SHOW TRIGGERS Query Quit

可以发现执行了flush tables(关闭所有已打开的表),它请求发起一个全局的读锁(FLUSH TABLES WITH READ LOCK)会阻止对所有表的写入操作,以此来确保数据的一致性。备份完成后,该会话断开,会自动解锁。

Query Query Query FLUSH Query FLUSH TABLES Query SHOW TABLES Query show Query Query Query show Query Query show fields Query Query Query Query Query SHOW TRIGGERS Query Quit

可以发现没什么变化,只是多执行了SHOW MASTER STATUS,我们看看备份出来的sql

 Connect   root Query      Query      Query     FLUSH  Query     FLUSH TABLES  Query     SHOW TABLES  Query     show  Query     
                    Query      Query     show  Query      Query     show fields  Query      Query      Query      Query      Query     SHOW TRIGGERS  Connect   root Query      Query      Query      Query     START  Query     SHOW TABLES  Query     show  Query     
                    Query      Query     show  Query      Query     show fields  Query      Query      Query      Query      Query     SHOW TRIGGERS  Query      Quit

InnoDB 表在备份时,通常启用选项 --single-transaction 来保证备份的一致性,可以实际上它的工作原理是设定本次会话的隔离级别为:REPEATABLE READ。然后启动了一个快照,实现一致性非锁定读。下面是官方给出的解释:

START TRANSACTION WITH CONSISTENT SNAPSHOT;

The WITH CONSISTENT SNAPSHOT option starts a consistent read for storage engines that are capable of it. This applies only to InnoDB. The effect is the same as issuing a START TRANSACTION followed by a SELECT from anyInnoDB table. See Section 14.2.7.2, “Consistent Nonlocking Reads”. The WITH CONSISTENT SNAPSHOT option does not change the current transaction isolation level, so it provides a consistent snapshot only if the current isolation level is one that permits consistent read (REPEATABLE READ or SERIALIZABLE).

Connect root Query Query Query FLUSH Query FLUSH TABLES Query Query START Query SHOW TABLES Query show Query Query Query show Query Query show fields Query Query Query Query Query SHOW TRIGGERS Query --flush-logs db table > /data/backup/table.sql

备份InnoDB表的参数推荐如下:

mysqldump  --single-transaction --master-data= --flush-log db table > /data/backup/table.sql

当然还有很多参数,比如设置字符集等,童鞋们自行help,你懂的!

参考资料:

https://dev.mysql.com/doc/refman/5.0/en/commit.html

http://dev.mysql.com/doc/refman/5.0/en/flush.html 

更多相关文章
一周排行
  • 在看数据结构与算法时,我的心情无比忐忑,无比纠结.在程序或者说项目设计之初,架构师会进行概要详细设计,抽象类,实现类,接口等等,然后对这些进行封装,设计算法(还有很多的步骤,可参考项目开发流程),而算法的设计取决于数 ...
  • 学神1-20正则表达式以及sed、awk的使用
    一.正则表达式概念正则表达式,又称正规表示法.常规表示法(英语:Regular Expre ...
  • 题目:参见这个链接,简单点说就是在控制台输出一个99乘方表. 无聊想了个C#版本的解答: private static void Print(int n) { var s = Enumerable.Range(1, ...
  • 一个分布式入侵检测系统的研究与设计安  娜,吴晓南,陈晓江,房鼎益(西北大学 计算机科学系,陕西 西安  710069)摘要:针对目前入侵检测系统不能适应异构网络环境.缺乏协同响应的不足,提出了一种基于CORBA的分 ...
  • 在默认情况下,cp的源文件与目的文件的权限是不同的,目的文件的拥有者通常是指令操作者本身.举例来说,如果以root身份cp其他用户的文件,那么复制过来的文件的拥有者就变成了root. 由于cp具有这个特性,所以我们在 ...
  • 公司邮箱目前使用的是Zimbra,该邮件服务器目前不甚稳定,经常出现重发.漏发问题.经测试,每100封邮件仅可成功发送98封左右,以下是测试数据:测试用例00封,总用时约:16min:实收97封,失败3次,3次 ...
  • 一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是"条件编译".有时,希望当满足某条件时对一组语句进行编译,而 ...
  • 9月13日<小黄人大眼萌>在国内首映,vivo.Uber也跟着凑起了热闹.12.13日两天,在世贸天阶,vivo联手Uber邀请大家与小黄人手机图标合影.只要上[email protected]@v ...
  • 个人发现的一些比较好的学习英语的网站:[url]http://www.52en.com/[/url][url]http://www.koolearn.com/eclass/cgks/abroad.jsp[/url][ ...
  • CyclicBarrier 接着讲多线程下的其他组件,第一个要讲的就是CyclicBarrier.CyclicBarrier从字面理解是指循环屏障,它可以协同多个线程,让多个线程在这个屏障前等待,直到所有线程都达到了 ...
Tags