MySQL中的mysqldump,真是一个经典而有效的工具,经常用,但是不知道后台运行的过程中到底在干些什么,其实如果想得到这些基本的信息不一定要去看代码,我们通过日志的方式就能一窥其中的奥妙。

如果想看到里面的一些较为细节的日志,开个general log就可以了。至于性能不用太担心,general log我们随开随关。

在不同的版本中也有一些差别,我选择的是MySQL 5.7.13的版本,简单看了下里面的日志。

首先这个环境的事务隔离级别我选择的是RC.

# mysqladmin var|grep isol
| tx_isolation                                             | READ-COMMITTED

导出的时候,用了下面的命令导出:

mysqldump --single-transaction --databases mobile_billing > test.sql

得到的日志如下,我们来选择性的解读一下。

Query  /*!40100 SET @@SQL_MODE='' */
Query  /*!40103 SET TIME_ZONE='+00:00' */

这里需要注意mysqldump会默认把隔离级别改为RR,然后开启的事务是有consistent snapshot选项,这个选项只对RR隔离级别有效。

Query  SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
Query  START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */

因为开启了GTID,这里就会按照这个规则来,后面导出的数据都是以这个GTID的事务为基准。

Query  SELECT @@GLOBAL.GTID_EXECUTED
Query  UNLOCK TABLES

下面考虑了存储的差异性,比如undo,通用表空间等,在这个环境中暂时没用,所以结果都是空。

Query  SELECT LOGFILE_GROUP_NAME, FILE_NAME, TOTAL_EXTENTS, INITIAL_SIZE, ENGINE, EXTRA FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'UNDO LOG' AND FILE_NAME IS NOT NULL AND LOGFILE_GROUP_NAME IS NOT NULL AND LOGFILE_GROUP_NAME IN (SELECT DISTINCT LOGFILE_GROUP_NAME FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA IN ('mobile_billig'))) GROUP BY LOGFILE_GROUP_NAME, FILE_NAME, ENGINE, TOTAL_EXTENTS, INITIAL_SIZE, EXTRA ORDER BY LOGFILE_GROUP_NAME

考虑了分区的影响范围

Query  SELECT DISTINCT TABLESPACE_NAME, FILE_NAME, LOGFILE_GROUP_NAME, EXTENT_SIZE, INITIAL_SIZE, ENGINE FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA IN ('mobile_billig')) ORDER BY TABLESPACE_NAME, LOGFILE_GROUP_NAME

下面是要导出数据的步骤了,会在开始的时候设定一个savepoint,然后导出表中的数据,完成之后,rollback到之前的save point点位,继续导出下一个表,直到完成,会释放savepoint,这样一来得到的数据就是基于同一个基准了。

Query  SHOW VARIABLES LIKE 'ndbinfo\_version'
 Init DB        mobile_billing

得到建库语句,默认没有添加if not exists的选项。

Query  SHOW CREATE DATABASE IF NOT EXISTS `mobile_billing`

开启save point

Query  SAVEPOINT sp

得到指定库下的数据表列表

Query  show tables

循环列表,得到表的状态,以便进一步处理。

Query  show table status like 'open\_sdk\_doc\_version'

sql_quote_show_create这个采纳数有两个值(1,0),默认是1,表示表名和列名会用``包着的。 这个服务器参数只可以在session级别设置,不支持global设置的(不支持my.cnf设置)

Query  SET SQL_QUOTE_SHOW_CREATE=1
 Query  SET SESSION character_set_results = 'binary'

得到建表语句,默认没有添加if not exists的选项。

Query  show create table `open_sdk_doc_version`

设定字符集

Query  SET SESSION character_set_results = 'utf8'

得到字段信息

Query  show fields from `open_sdk_doc_version`
 Query  show fields from `open_sdk_doc_version`

得到的数据会是insert into的形式,其中sql_no_cache的作用是避免查询结果缓存

Query  SELECT /*!40001 SQL_NO_CACHE */ * FROM `open_sdk_doc_version`

Query  SET SESSION character_set_results = 'binary'
 Query  show create table `open_sdk_doc_version`

Query  SET SESSION character_set_results = 'utf8'
 Query  ROLLBACK TO SAVEPOINT sp
 。。。

继续下一个表
直到完成,就会释放save point
Query  ROLLBACK TO SAVEPOINT sp
Query  RELEASE SAVEPOINT sp

mysqldump简单解析相关推荐

  1. 插件化框架DL源码的简单解析

    目前行业内已经有较多的插件化实现方案.本文主要对DL(DynamicLoadApk)这一个开源的侵入式插件化方案进行简单分析.因为Service组件插件化的实现逻辑和Activity大体相似,所以在这 ...

  2. java 解析xls 文件_java简单解析xls文件的方法示例【读取和写入】

    本文实例讲述了java简单解析xls文件的方法.分享给大家供大家参考,具体如下: 读取: import java.io.*; import jxl.*; import jxl.write.*; imp ...

  3. [ 转载 ] Java基础10--关于Object类下所有方法的简单解析

    关于Object类下所有方法的简单解析 类Object是类层次结构的根类,是每一个类的父类,所有的对象包括数组,String,Integer等包装类,所以了解Object是很有必要的,话不多说,我们直 ...

  4. java在线打开xml文件_java实现简单解析XML文件功能示例

    本文实例讲述了java实现简单解析XML文件功能.分享给大家供大家参考,具体如下: package demo; import java.io.File; import java.io.IOExcept ...

  5. java:AXIS调用webService接口,返回String类型xml,并用dom4j简单解析xml

    一.使用axis调用webService接口,返回String类型xml 1.导入axis依赖 2.直接贴代码 /*** 调用webservice接口的方法,并返回String类型的xml* @par ...

  6. HTML-HTML协议简单解析

    HTML-HTML协议简单解析 在浏览器访问一个地址: 127.0.0.1:7890/html/html.htm //代表访问当地服务器路径下的/html的html.htm文件 客户端发送的请求命令是 ...

  7. C++生成LNK文件及LNK文件简单解析

    C++生成LNK文件及LNK文件简单解析 话不多说,直接上代码吧. 生成快捷方式代码: int CreateLnk(const wchar_t* TARGET, const wchar_t* LNKF ...

  8. 大数据培训课程数据清洗案例实操-简单解析版

    数据清洗(ETL) 在运行核心业务MapReduce程序之前,往往要先对数据进行清洗,清理掉不符合用户要求的数据.清理的过程往往只需要运行Mapper程序,不需要运行Reduce程序.大数据培训 数据 ...

  9. 邻近算法(KNN)原理简单解析

    邻近算法(KNN)原理简单解析 一.什么是邻近算法 1.1简介 1.2核心思想 1.3 算法流程 1.4 优缺点 二.实例演示KNN算法 一.什么是邻近算法 1.1简介 邻近算法,或者说K最近邻(KN ...

最新文章

  1. 4.Product-based Neural Networks for User Response Prediction论文详细解读和代码实现
  2. python 如何将数字字符串转换为数字?
  3. mybatis mysql 配置文件_mybatis简单应用(基于配置文件)_MySQL
  4. XSS跨站脚本小结(转)
  5. 实用软件工程(张海藩)复习笔记
  6. 大学转计算机专业申请理由,大学转专业申请书
  7. Java连接redis集群报错,connection refused 和Could not get a resource from the pool
  8. 如何快速通过信息系统管理工程师考试
  9. 【代码审计】51 TP5框架、无框架 变量覆盖反序列化
  10. 阿里云服务器ECS有哪些功能特性?
  11. 恒生与中国信通院联合发布《证券行业分布式核心系统SRE运维白皮书》
  12. 5G还没用上,4G却越来越慢了?
  13. CSS中如何让背景颜色半透明
  14. linux中的chmod命令详细介绍、使用及实例
  15. Windows10安装Ubuntu子系统+配置SSH连接+安装xfce4图形界面+配置xrdc远程桌面连接
  16. C语言程序设计上机实验教程,C语言程序设计教程-上机实验报告
  17. 计算机版初中语文课文原文,初中语文课文蝉原文
  18. 联想p720装系统_“多达112个框”:Lenovo 联想 推出 ThinkStation P920/P720系列 工作站...
  19. 材料库存天数的计算方法
  20. 解决控制台Could not resolve view with name ...

热门文章

  1. SQL语句取得最大件数(MSSQL ORACLE Postgre,top rownum,limit)
  2. iphonex适配游戏_Galaxy Fold应用适配大测试,这些软件超有远见!
  3. ***PHP Notice: Undefined index: ..问题的解决方法
  4. 安装mysql数据库及问题解决方法
  5. Emgu.CV.CvInvoke的类型初始值设定项引发异常
  6. 利用PhantomJS进行网页截屏,完美解决截取高度的问题
  7. 解决虚拟机在能ping通网关情况下出现From 192.168.1.10: icmp_seq=1 Redirect Network(New nexthop: 192.168.1.1)问题
  8. Ubuntu14.04安装中文输入法以及解决Gedit中文乱码问题
  9. 如何找到JavaScript中的调用者函数?
  10. mysql not in 的坑 -- null 值