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 

更多相关文章
一周排行
  • 尊敬的51cto会员,大家好,我是[文德数据]的90小编小宇:       刚刚浏览了好长时间的云计算资料,对它有所了解,不知道大家有没有发现其实云计算只是一种假想的东西. 猜测1.IDC和云计算关系密切. 首先,I ...
  • yum install openssl openssl-devel lzo lzo-devel pam pam-devel gcc automake pkgconfigyum install openvpnunzip ...
  • 第十六章一些高级Perl技术1.在程序运行里,可以使用eval 块表达式(块后的分号不能省略,因为是表达式)来捕获严重错误,以防止程序运行时崩溃:其捕获结果存储于特殊变量 $@ 中,[email protected]("假" ...
  •  1.emesene聊天工具如何删除聊天记录? 进入 [email protected]/log$ 清空base.db文件即可 
  • init服务    init进程是所有进程的发起者和控制者.因为在任何基于Unix的系统(比如linux)中,它都是第一个运行的进程,所以init进程的编号(Process ID,PID)永远是1.如果init出现了 ...
  •         openvpn的认证有很多方式,比如证书认证,用户名密码认证,而用户名密码认证也可用通过两种方式实现,一是使用pam_mysql实现openvpn利用mysql认证,二是使用radius实现openv ...
  • Visual C#.NET入门与提高http://download.chinaitlab.com/soft/6330.htm 使用Visual C# 开发asp.NET入门http://download.chinai ...
  • 浮点型数据存储方式
        转至:http://blog.csdn.net/wzy198852/article ...
  • 对5串string的字符串进行从小到大的排序//string sort #include <iostream> #include <string> usingnamespace std;    ...
  • Nagios简介与安装1
        搭建Nagios实在是一个繁杂的过程,首先需要读者有Linux基础,最为重要的是要 ...
Tags