0、前言

本文主要探讨 mysqldump 的几种主要工作方式,并且比较一下和

1、mysqldump

首先来看下 mysqldump 的几个主要参数的实际工作方式。

mysqldump 几个主要选项

1. -q

很简单,什么都不做,只是导出时加了一个 SQL_NO_CACHE 来确保不会读取缓存里的数据。

081022 17:39:33 7 Connect root@localhost on

7 Query /*!40100 SET @@SQL_MODE='' */

7 Init DB yejr

7 Query SHOW TABLES LIKE 'yejr'

7 Query LOCK TABLES `yejr` READ /*!32311 LOCAL */

7 Query SET OPTION SQL_QUOTE_SHOW_CREATE=1

7 Query show create table `yejr`

7 Query show fields from `yejr`

7 Query show table status like 'yejr'

7 Query SELECT /*!40001 SQL_NO_CACHE */ * FROM `yejr`

7 Query UNLOCK TABLES

7 Quit

2. --lock-tables

跟上面类似,不过多加了一个 READ LOCAL LOCK,该锁不会阻止读,也不会阻止新的数据插入。

081022 17:36:21 5 Connect root@localhost on

5 Query /*!40100 SET @@SQL_MODE='' */

5 Init DB yejr

5 Query SHOW TABLES LIKE 'yejr'

5 Query LOCK TABLES `yejr` READ /*!32311 LOCAL */

5 Query SET OPTION SQL_QUOTE_SHOW_CREATE=1

5 Query show create table `yejr`

5 Query show fields from `yejr`

5 Query show table status like 'yejr'

5 Query SELECT /*!40001 SQL_NO_CACHE */ * FROM `yejr`

5 Query UNLOCK TABLES

5 Quit

3. --lock-all-tables

这个就有点不太一样了,它请求发起一个全局的读锁,会阻止对所有表的写入操作,以此来确保数据的一致性。备份完成后,该会话断开,会自动解锁。

081022 17:36:55 6 Connect root@localhost on

6 Query /*!40100 SET @@SQL_MODE='' */

6 Query FLUSH TABLES

6 Query FLUSH TABLES WITH READ LOCK

6 Init DB yejr

6 Query SHOW TABLES LIKE 'yejr'

6 Query SET OPTION SQL_QUOTE_SHOW_CREATE=1

6 Query show create table `yejr`

6 Query show fields from `yejr`

6 Query show table status like 'yejr'

6 Query SELECT /*!40001 SQL_NO_CACHE */ * FROM `yejr`

6 Quit

4. --master-data

除了和刚才的 --lock-all-tables 多了个 SHOW MASTER STATUS 之外,没有别的变化。

081022 17:59:02 1 Connect root@localhost on

1 Query /*!40100 SET @@SQL_MODE='' */

1 Query FLUSH TABLES

1 Query FLUSH TABLES WITH READ LOCK

1 Query SHOW MASTER STATUS

1 Init DB yejr

1 Query SHOW TABLES LIKE 'yejr'

1 Query SET OPTION SQL_QUOTE_SHOW_CREATE=1

1 Query show create table `yejr`

1 Query show fields from `yejr`

1 Query show table status like 'yejr'

1 Query SELECT /*!40001 SQL_NO_CACHE */ * FROM `yejr`

1 Quit

5. --single-transaction

InnoDB 表在备份时,通常启用选项 --single-transaction 来保证备份的一致性,实际上它的工作原理是设定本次会话的隔离级别为:REPEATABLE READ,以确保本次会话(dump)时,不会看到其他会话已经提交了的数据。

081022 17:23:35 1 Connect root@localhost on

1 Query /*!40100 SET @@SQL_MODE='' */

1 Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ

1 Query BEGIN

1 Query UNLOCK TABLES

1 Init DB yejr

1 Query SHOW TABLES LIKE 'yejr'

1 Query SET OPTION SQL_QUOTE_SHOW_CREATE=1

1 Query show create table `yejr`

1 Query show fields from `yejr`

1 Query show table status like 'yejr'

1 Query SELECT /*!40001 SQL_NO_CACHE */ * FROM `yejr`

1 Quit

6. --single-transaction and --master-data

本例中,由于增加了选项 --master-data,因此还需要提交一个快速的全局读锁。在这里,可以看到和上面的不同之处在于少了发起 BEGIN 来显式声明事务的开始。这里采用 START TRANSACTION WITH CONSISTENT SNAPSHOT来代替 BEGIN 的做法的缘故不是太了解,可以看看源代码来分析下。

081022 17:27:07 2 Connect root@localhost on

2 Query /*!40100 SET @@SQL_MODE='' */

2 Query FLUSH TABLES

2 Query FLUSH TABLES WITH READ LOCK

2 Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ

2 Query START TRANSACTION WITH CONSISTENT SNAPSHOT

2 Query SHOW MASTER STATUS

2 Query UNLOCK TABLES

2 Init DB yejr

2 Query SHOW TABLES LIKE 'yejr'

2 Query SET OPTION SQL_QUOTE_SHOW_CREATE=1

2 Query show create table `yejr`

2 Query show fields from `yejr`

2 Query show table status like 'yejr'

2 Query SELECT /*!40001 SQL_NO_CACHE */ * FROM `yejr`

2 Quit

关于 START TRANSACTION WITH CONSISTENT SNAPSHOT 的说明可以看下手册描述:

The WITH CONSISTENT SNAPSHOT clause 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 any InnoDB table. See Section 13.2.10.4, “Consistent Non-Locking Read”. The WITH CONSISTENT SNAPSHOT clause does not change the current transaction isolation level, so it provides a consistent snapshot only if the current isolation level is one that allows consistent read (REPEATABLE READ or SERIALIZABLE).

2. mysqldump 和 mk-parralel-dump 的比较

mk-parralel-dump 是开源项目 Maatkit 中的一个工具,主要由 Baron Schwartz 维护。mk-parralel-dump 是由 perl 开发的,可以实现并发的导出数据表。具体的功能不细说,自己去看相关文档吧。这里只列出在我的环境下和 mysqldump 的对比数据。

2.1 mysqldump 常规使用

#导出耗时

time mysqldump -f --single-transaction -B yejr --tables yejr | gzip > /home/databak/yejr.sql.gz

real 10m15.319s

user 6m47.946s

sys 0m38.496s

#文件大小

608M /home/databak/yejr.sql.gz

#导出期间系统负载

05:00:01 PM all 0.71 0.00 0.61 7.33 91.36

05:10:02 PM all 13.93 0.00 2.21 4.64 79.22

2.2 mysqldump + gzip --fast

#导出耗时

time mysqldump -f --single-transaction -B yejr --tables yejr | gzip --fast > /home/databak/yejr_fast.sql.gz

real 9m6.248s

user 4m21.467s

sys 0m37.604s

#文件大小

815M Oct 21 17:33 /home/databak/yejr_fast.sql.gz

#导出期间系统负载

05:20:01 PM all 11.94 0.00 2.43 5.69 79.94

05:30:01 PM all 6.46 0.00 1.57 3.95 88.02

2.3 mk-parallel-dump 常规使用

time ./mk-parallel-dump --database yejr --tables yejr --basedir /home/databak/

default: 25 tables, 25 chunks, 25 successes, 0 failures, 404.93 wall-clock time, 613.25 dump time

real 6m48.763s

user 4m20.724s

sys 0m38.125s

#文件大小

819M /home/databak/default/yejr/

#导出期间系统负载

05:10:02 PM all 13.93 0.00 2.21 4.64 79.22

05:20:01 PM all 11.94 0.00 2.43 5.69 79.94

可以看到,mk-parallel-dump 尽快确实实现了并发导出,速度相对快多了,却有个致命伤:那就是它不支持InnoDB的一致性备份,目前已经有人提交相关代码了,不过还没实现,期待中。

本文转自叶金荣51CTO博客,原文链接:http://blog.51cto.com/imysql/308845,如需转载请自行联系原作者

mysql+dump+选项_mysqldump的几个主要选项探究相关推荐

  1. mysql dump 选项_mysqldump的几个主要选项探究

    作/译者:叶金荣(Email: ),来源:http://imysql.cn,转载请注明作/译者和出处,并且不能用于商业用途,违者必究. 0.前言 本文主要探讨 mysqldump 的几种主要工作方式, ...

  2. mysql dump 参数_mysqldump常用参数

    收集一些常用的mysqldump命令组合. 备份数据库 1.导出结构不导出数据 **复制代码代码如下: 2.导出数据不导出结构 3.导出数据和表结构 4.导出特定表的结构 导入数据: 由于mysqld ...

  3. mysql dump 二进制_mysqldump+二进制日志备份恢复

    mysql备份和恢复 完全备份.部分备份 完全备份:备份整个数据集 部分备份:只备份数据子集 完全备份.增量备份.差异备份 增量备份:仅备份最近一次完全备份或增量备份(如果存在增量)以来变化的数据 差 ...

  4. mysql+dump+选项_详解MySQL数据备份之mysqldump使用方法

    mysqldump常用于MySQL数据库逻辑备份. 1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump ...

  5. mysql dump schema_MySQL入门篇之mysqldump参数说明

    A Database Backup Program mysqldump客户端是一款实用的mysql备份程序,可以对数据库的定义及数据表内容,进行备份生成相应的SQL语句.它可以对一个或多个数据库进行备 ...

  6. mysql dump gtid_mysqldump导出数据备份 --set-gtid-purged=OFF

    Mysql 数据库 在主从 数据库进行 导出备份和恢复的时候,需要注意是否启用数据库用GTID模式.如果开启,则在mysqldump数据时,应该mysqldump命令加上参数--set-gtid-pu ...

  7. mysql 逻辑备份导入数据库_mysql逻辑备份(mysql dump的使用)

    mysqldump 属于MySQL客户端工具 mysqldump备份工具对于MyISAM存储引擎实现备份是温备份,对innodb存储引擎是可以实现热备份. 使用mysqldump备份数据库可以实现完全 ...

  8. MySQL之mysql dump的使用

    一.mysqldump 简介 mysqldump 是 MySQL 自带的逻辑备份工具.它的备份原理是通过协议连接到 MySQL 数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的insert ...

  9. 以下选项不是python打开方式的是-以下选项,不是Python保留字的选项是:_学小易找答案...

    [判断题]企业为促销商品给予购买方的现金折扣,应按扣除现金折扣后的金额确定销售收入计算企业所得税应纳税所得额. ( ) [单选题]以下选项中符合Python语言变量命名规则的是 def fact(n) ...

最新文章

  1. 是时候了解下无监督学习了!
  2. 3D视觉技术的6个问答
  3. windows给应用断网
  4. 初中计算机教师资格考试试题,2017下半年初中信息技术教师资格证面试试题(精选)第一批(2)...
  5. java实现三位数加减乘除_用Java位运算实现加减乘除四则运算
  6. python面向对象(2)——继承(4)
  7. Plain text, flat file, 及flat-file database 如何翻译
  8. 自然语言处理中的Attention Model:是什么以及为什么[二]
  9. java转json数组对象_java对象转json、json数组 、xml | 学步园
  10. github使用指南_所有开源项目免费使用,GitHub 内置 CI/CD 终于来了
  11. PHP ceil()函数
  12. 什么叫位?什么叫字节?什么叫字长?字长表示了计算机的什么特点?,计算机应用基础...
  13. Java中抽象类和接口的区别
  14. 【计组5.5】指令流水线
  15. No version of NDK matched the requested version xxx 问题解决
  16. 【转载】爬虫篇——requests的基础知识(总结)
  17. 月薪两万的“土豪”师兄,加个微信吧!
  18. SQL Server全程
  19. java_home的配置
  20. 中兴交换机vsc配置实例

热门文章

  1. 熵,交叉熵,散度理解较为清晰
  2. Deep Learning部署TVM Golang运行时Runtime
  3. 激光雷达Lidar与毫米波雷达Radar:自动驾驶的利弊
  4. CVPR2020:点云分析中三维图形卷积网络中可变形核的学习
  5. 3D车道线检测:Gen-LaneNet
  6. select 和 order by
  7. 使用SSH和Nginx做内网HTTP映射
  8. PyTorch 笔记(13)— autograd(0.4 之前和之后版本差异)、Tensor(张量)、Gradient(梯度)
  9. hdu 6205 card card card 尺取+超神读入挂
  10. django基础(一)