mysql_ping 原理_mysqldump备份过程原理

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 #整个过程完成,退出进程

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

作者:xiaoboluo

出处:xiaoboluo的博客 http://www.cnblogs.com/xiaoboluo768/

感谢您的认真阅读。本文版权归作者所有,欢迎转载,但请保留该声明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值