mysqldump备份方便,易读,功能丰富,相信大家都有 使用过这个命令进行备份,但是这个命令在备份的过程中都做了写什么呢,下面打开general_log进行查看:

1.登录mysql命令行客户端:

set global general_log=1;

2.使用下面的命令进行备份:

mysqldump -uroot -p'password'  --opt --default-character-set=utf8 --triggers -R --master-data=2 --hex-blob --single-transaction --no-autocommit --all-databases -S /data/mysql3306/mysql3306.sock > aa.sql

3.默认情况下,查询日志在datadir目录下的`hostname`.log中,打开这个日志查看内容:

160105 15:20:46    26 Connect root@localhost on
     26 Query /*!40100 SET @@SQL_MODE='' */ #修改sql模式
     26 Query /*!40103 SET TIME_ZONE='+00:00' */ #修改时区
     26 Query FLUSH /*!40101 LOCAL */ TABLES ##把内存中的表结构的改动同步到磁盘
     26 Query FLUSH TABLES WITH READ LOCK #对于非事务表,给全局加上意向S锁,能读不能写的状态,这样就拿到了一个一致性备份,等复制完了再unlock tables;
     26 Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ #修改隔离级别为RR,在这个隔离级别下,可以实现一致性非锁定读,即可以拿到一个一致性快照
     26 Query START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */ #开始一个一致性快照,最后要么rollback,要么commit,注意,这个在整个备份过程中是一个大的事务
     26 Query SHOW VARIABLES LIKE 'gtid\_mode' #如果开启了gtid,那么会获取出gtid_executed  的位置,即,已经同步到数据文件中的事务的位置
     26 Query SHOW MASTER STATUS  #对于Myisam表,在全局S锁的情况下,只有读,没有写,获取binlog filename和position,即就是当前备份数据的位置,对于innodb表,因为前面START TRANSACTION显式开启一个事务,所以事务内获取的就是快照数据的位置
     26 Query UNLOCK TABLES #在获得了binlog filename和position之后,解锁表
     #下面查询INFORMATION_SCHEMA.FILES表的SQL是针对NDB存储引擎的
     26 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 GROUP BY LOGFILE_GROUP_NAME, FILE_NAME, ENGINE ORDER BY LOGFILE_GROUP_NAME
     26 Query SELECT DISTINCT TABLESPACE_NAME, FILE_NAME, LOGFILE_GROUP_NAME, EXTENT_SIZE, INITIAL_SIZE, ENGINE FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' ORDER BY TABLESPACE_NAME, LOGFILE_GROUP_NAME
     26 Query SHOW DATABASES #查看有哪些库
     26 Query SHOW VARIABLES LIKE 'ndbinfo\_version' #NDB基本用不到,这里无须关注
     26 Init DB mysql #开始备份mysql库
     26 Query SHOW CREATE DATABASE IF NOT EXISTS `mysql`
     26 Query SAVEPOINT sp #定义的一个保存点,为了避免在整个备份这个大事务中出错,采用了断点设置,在这里定义一个保存点,表示这个位置是从show master status的位置,后面每个表
     26 Query show tables #查看mysql库有哪些表
     26 Query show table status like 'columns\_priv' #查看这个表的状态
     26 Query SET SQL_QUOTE_SHOW_CREATE=1  #给每个表的每个字段加个反引号
     26 Query SET SESSION character_set_results = 'binary' #表结构的备份都是binary格式,所以要先改这个
     26 Query show create table `columns_priv` #查看这个表的定义
     26 Query SET SESSION character_set_results = 'utf8'
     26 Query show fields from `columns_priv` #查看表有哪些字段
     26 Query SELECT /*!40001 SQL_NO_CACHE */ * FROM `columns_priv` #查询表中的数据,结合show fields from `columns_priv`的字段信息生成insert into语句
     26 Query SET SESSION character_set_results = 'binary'
     26 Query use `mysql`
     26 Query select @@collation_database
     26 Query SHOW TRIGGERS LIKE 'columns\_priv'
     26 Query SET SESSION character_set_results = 'utf8'
     26 Query ROLLBACK TO SAVEPOINT sp ##一个表执行完之后,就回滚到前面打的事务标签的位置,即回滚到这个保存点的位置再重新开始
   ...... #此处省略其他表,所有表的备份过程这里都是一样的
     26 Query RELEASE SAVEPOINT sp #同一个库中的所有表备份完成之后,就会释放这个保存点
     26 Query use `mysql`
     26 Query select @@collation_database
     26 Query SET SESSION character_set_results = 'binary'
     26 Query SHOW FUNCTION STATUS WHERE Db = 'mysql' #查询mysql库的所有存储函数
     26 Query SHOW PROCEDURE STATUS WHERE Db = 'mysql' #查询mysql库的所有存储过程
     26 Query SET SESSION character_set_results = 'utf8'
     26 Query show table status like 'general\_log' #查询日志的表状态信息
     26 Query SET SQL_QUOTE_SHOW_CREATE=1
     26 Query SET SESSION character_set_results = 'binary'
     26 Query show create table `general_log` #查询日志的表定义
     26 Query SET SESSION character_set_results = 'utf8'
     26 Query show fields from `general_log` #查询日志的表字段信息
     26 Query show table status like 'slow\_log' #查询慢日志表状态信息
     26 Query SET SQL_QUOTE_SHOW_CREATE=1
     26 Query SET SESSION character_set_results = 'binary'
     26 Query show create table `slow_log` #查询慢日志表结构
     26 Query SET SESSION character_set_results = 'utf8'
     26 Query show fields from `slow_log` #查询慢日志表字段信息
     26 Init DB test #初始化另外一个库,循环开始上面的过程
    
     26 Quit #整个过程完成,退出进程

注:以上过程为个人理解,如有错误,还望指正

mysqldump备份过程中都干了些什么的更多相关文章

  1. loadView在App启动时到底都干了些什么?

    loadView在App启动时到底都干了些什么? 查阅苹果官方文档如下: 1. 当你访问一个ViewController的view属性时,如果此时view的值是nil,那么,ViewControlle ...

  2. Beagleboneblack的MLO文件干了些啥

    Beagleboneblack在启动linux之前还有三个启动阶段: ROM code  -->  MLO  -->  u-boot --> kernel 先看看ROM code干了 ...

  3. swoft| 源码解读系列二: 启动阶段, swoft 都干了些啥?

    date: 2018-8-01 14:22:17title: swoft| 源码解读系列二: 启动阶段, swoft 都干了些啥?description: 阅读 sowft 框架源码, 了解 sowf ...

  4. 输入url后浏览器干了些什么(详解)

    输入url后浏览器干了些什么(详解) DNS(Domain Name System, 域名系统) 解析 DNS解析的过程就是寻找哪台机器上有你真正需要的资源过程.但你在浏览器张红输入一个地址时,例如: ...

  5. 看看C# 6.0中那些语法糖都干了些什么(上篇)

    今天没事,就下了个vs2015 preview,前段时间园子里面也在热炒这些新的语法糖,这里我们就来看看到底都会生成些什么样的IL? 一:自动初始化属性 确实这个比之前的版本简化了一下,不过你肯定很好 ...

  6. RocketMQ Consumer 启动时都干了些啥?

    可能我们对 RocketMQ 的消费者认知乍一想很简单,就是一个拿来消费消息的客户端而已,你只需要指定对应的 Topic 和 ConsumerGroup,剩下的就是只需要: 接收消息 处理消息 就完事 ...

  7. 看看C# 6.0中那些语法糖都干了些什么(中篇)

    接着上篇继续扯,其实语法糖也不是什么坏事,第一个就是吃不吃随你,第二个就是最好要知道这些糖在底层都做了些什么,不过有一点 叫眼见为实,这样才能安心的使用,一口气上五楼,不费劲. 一:字符串嵌入值 我想 ...

  8. js中的new关键字都干了些什么?

    new 操作符 在有上面的基础概念的介绍之后,在加上new操作符,我们就能完成传统面向对象的class + new的方式创建对象,在javascript中,我们将这类方式成为Pseudoclassic ...

  9. 在比特币的OP_RETURN上,大家都干了些啥?

    我在之前的一篇文章中介绍了怎么通过C#将一句话写入到比特币的区块链网络中,最近花了好几天的时间,我终于把比特币的区块链数据载入到了SQLServer(具体做法参加我的这篇博客:http://www.c ...

随机推荐

  1. Using Amazon API Gateway with microservices deployed on Amazon ECS

    One convenient way to run microservices is to deploy them as Docker containers. Docker containers ar ...

  2. 使用mysql 的docker

    sudo docker run --name phpmyAdmin3 --link some-mysql:mysql -d phpmyadmin/phpmyadmin:latest -p 8080:8 ...

  3. Lua xavante WEB server实现xmlrpc服务器端

    xavante xavante是一个使用lua实现的遵守http1.1的web server,支持wsapi. 依赖库: xavante核心 -- lua, copas(纯lua编写,网络连接coro ...

  4. mantis 安装问题

    1. 邮件 修改 config_defaults_inc.php $g_administrator_email = 'mantis@pooy.net'; $g_webmaster_email = 'm ...

  5. subprocess使用

    1. Popen使用 test = subprocess.Popen('ls /tmpa', shell=True, stdout = subprocess.PIPE, stderr=subproce ...

  6. Struts2上传图片时报404错误

    可能是struts配置文件中定义的拦截器导致的,后缀拦截导致,将该拦截器去掉,在action类里判断后缀 public String upload()throws Exception{ ActionC ...

  7. 自动检查点(Automatic Checkpointing)

    自动检查点(Automatic Checkpointing)在oracle10g,支持自动检查点调优,这样可以提高系统可用性.自动检查点调优需要开启参数fast_start_mttr_target. ...

  8. Java基础之泛型——使用二叉树进行排序(TryBinaryTree)

    控制台程序. 1.实现针对容器类的基于集合的循环 为了让容器类类型的对象能够在基于集合的for循环中可用,类必须并且只需要满足一个要求——必须实现泛型接口java.lang.Iterable<& ...

  9. mysql 执行状态分析 show processlist

    SHOW PROCESSLIST显示哪些线程正在运行.您也可以使用mysqladmin processlist语句得到此信息.如果您有SUPER权限,您可以看到所有线程.否则,您只能看到您自己的线程( ...

  10. 有时候dfs可以简化各种组合的操作

    比如有时某些操作是组合起来的,你不用去模拟每一种,把其拆分为几种单个操作,就可以了,因为反正会枚举所有的,所以也反正会组合出那种...而且不易出错.. 当然以上只是一种思维方式,并不一定可行,还要考虑 ...