• MySQLdump备份时MySQL到底做了什么?


    MySQL dump备份时MySQL到底做了什么?

    一、先决条件

    • 备份时使用的mysqldump命令
    mysqldump -uroot -p -S /data/mysql/data/3308/mysqld.sock -B testdb -R --triggers --routines --master-data=2 --single-transaction --set-gtid-purged=OFF > /root/testdb.sql
     
    • 开启general_log命令
    mysql> set global general_log=1;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show variables like '%g%log%';
    +----------------------------------+------------------------------------+
    | Variable_name                    | Value                              |
    +----------------------------------+------------------------------------+
    | binlog_rows_query_log_events     | ON                                 |
    | general_log                      | ON                                 |
    | general_log_file                 | /data/mysql/data/3308/dmp-udp3.log |
    | log_statements_unsafe_for_binlog | ON                                 |
    | log_syslog                       | OFF                                |
    | log_syslog_facility              | daemon                             |
    | log_syslog_include_pid           | ON                                 |
    | log_syslog_tag                   |                                    |
    +----------------------------------+------------------------------------+
    8 rows in set (0.00 sec)
     
    • 查询 testdb 库一共有多少张表
    mysql> show tables;
    +------------------+
    | Tables_in_testdb |
    +------------------+
    | sbtest1          |
    | sbtest2          |
    +------------------+
    2 rows in set (0.00 sec)
     

    二、分析general_log日志过程

    • 开启general_log日志后执行备份命令
    [root@dmp-udp3 ~]# /data/mysql/base/5.7.25/bin/mysqldump -uroot -p -S /data/mysql/data/3308/mysqld.sock -B testdb -R --triggers --routines 
    --master-data=2 --single-transaction --set-gtid-purged=OFF > /root/testdb.sql
     
    [root@dmp-udp3 ~]# cat /data/mysql/data/3308/dmp-udp3.log
    2020-06-24T07:38:58.288670-00:00      391 Connect   root@localhost on  using Socket                        <---------- root@localhost用户本地socket连接
    2020-06-24T07:38:58.289269-00:00      391 Query /*!40100 SET @@SQL_MODE='' */                            <---------- 临时设置sql_mode严格模式为关闭
    2020-06-24T07:38:58.289550-00:00      391 Query /*!40103 SET TIME_ZONE='+00:00' */
    2020-06-24T07:38:58.289764-00:00      391 Query FLUSH /*!40101 LOCAL */ TABLES                           <---------- 刷新表缓存
    2020-06-24T07:38:58.290656-00:00      391 Query FLUSH TABLES WITH READ LOCK                              <---------- 加全局只读锁( 因为mysqldump时加了 --master-data=2 参数,要获取MySQL服务器一个时间点的状态信息 )
    2020-06-24T07:38:58.291805-00:00      391 Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ  <---------- 会话级临时修改MVCC隔离级别为RR可重复读
    2020-06-24T07:38:58.292738-00:00      391 Query START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */   <---------- 开启一个事务
    2020-06-24T07:38:58.293075-00:00      391 Query SHOW MASTER STATUS                                       <---------- 获取binlog文件名、position位点、GTID值
    2020-06-24T07:38:58.293330-00:00      391 Query UNLOCK TABLES                                            <---------- 释放全局只读锁( 已经在上方获取到了一个时间点的状态信息,所以要释放全局锁 )
                                                                                                                <---------- 查询 information_schema.partitions 表,确定 testdb 库是否有 “分区表”
    2020-06-24T07:38:58.293657-00:00      391 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 ('testdb'))) GROUP BY LOGFILE_GROUP_NAME, FILE_NAME, ENGINE, TOTAL_EXTENTS, INITIAL_SIZE ORDER BY LOGFILE_GROUP_NAME
    2020-06-24T07:38:58.296022-00:00      391 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 ('testdb')) ORDER BY TABLESPACE_NAME, LOGFILE_GROUP_NAME
    2020-06-24T07:38:58.297643-00:00      391 Query SHOW VARIABLES LIKE 'ndbinfo\_version'
    2020-06-24T07:38:58.301038-00:00      391 Init DB   testdb
    2020-06-24T07:38:58.301171-00:00      391 Query SHOW CREATE DATABASE IF NOT EXISTS `testdb`              <---------- 查询testdb建库语句
    2020-06-24T07:38:58.301309-00:00      391 Query SAVEPOINT sp                                             <---------- 保存命名为 sp 在事务内某一个点的状态 https://dev.mysql.com/doc/refman/5.7/en/savepoint.html
    2020-06-24T07:38:58.301429-00:00      391 Query show tables
    2020-06-24T07:38:58.301671-00:00      391 Query show table status like 'sbtest1'                         <---------- 查询 sbtest1 表元数据信息
    2020-06-24T07:38:58.301999-00:00      391 Query SET SQL_QUOTE_SHOW_CREATE=1                              <---------- 设置导出后建表语句对表名、字段名加反引号 https://dev.mysql.com/doc/refman/5.7/en/show-create-table.html
    2020-06-24T07:38:58.302177-00:00      391 Query SET SESSION character_set_results = 'binary'
    2020-06-24T07:38:58.302310-00:00      391 Query show create table `sbtest1`                              <---------- 查询 sbtest1 表的建表语句
    2020-06-24T07:38:58.302490-00:00      391 Query SET SESSION character_set_results = 'utf8'          
    2020-06-24T07:38:58.302618-00:00      391 Query show fields from `sbtest1`                               <---------- 类似执行 desc sbtest1; 一样的效果,查看表结构
    2020-06-24T07:38:58.303065-00:00      391 Query show fields from `sbtest1`
    2020-06-24T07:38:58.303513-00:00      391 Query SELECT /*!40001 SQL_NO_CACHE */ * FROM `sbtest1`         <---------- 查询 sbtest1 表所有的数据
    2020-06-24T07:38:58.971979-00:00      391 Query SET SESSION character_set_results = 'binary'
    2020-06-24T07:38:58.972338-00:00      391 Query use `testdb`
    2020-06-24T07:38:58.972539-00:00      391 Query select @@collation_database                              <---------- 查询当前数据库级别的字符集校对规则
    2020-06-24T07:38:58.972787-00:00      391 Query SHOW TRIGGERS LIKE 'sbtest1'                             <---------- 查看 sbtest1 表是否存在触发器需要备份 ( 参数 --triggers 的作用 )
    2020-06-24T07:38:58.973504-00:00      391 Query SET SESSION character_set_results = 'utf8'
    2020-06-24T07:38:58.973643-00:00      391 Query ROLLBACK TO SAVEPOINT sp                                 <---------- 回滚到保存 sp 状态的时间
    2020-06-24T07:38:58.973820-00:00      391 Query show table status like 'sbtest2'                         <---------- 查询 sbtest2 表元数据信息
    2020-06-24T07:38:58.974130-00:00      391 Query SET SQL_QUOTE_SHOW_CREATE=1                              <---------- 设置导出后建表语句对表名、字段名加反引号 https://dev.mysql.com/doc/refman/5.7/en/show-create-table.html
    2020-06-24T07:38:58.974256-00:00      391 Query SET SESSION character_set_results = 'binary'
    2020-06-24T07:38:58.974371-00:00      391 Query show create table `sbtest2`                              <---------- 查询 sbtest2 表的建表语句
    2020-06-24T07:38:58.974551-00:00      391 Query SET SESSION character_set_results = 'utf8'
    2020-06-24T07:38:58.974697-00:00      391 Query show fields from `sbtest2`
    2020-06-24T07:38:58.975132-00:00      391 Query show fields from `sbtest2`
    2020-06-24T07:38:58.975489-00:00      391 Query SELECT /*!40001 SQL_NO_CACHE */ * FROM `sbtest2`         <---------- 查询 sbtest2 表所有的数据
    2020-06-24T07:38:59.642175-00:00      391 Query SET SESSION character_set_results = 'binary'
    2020-06-24T07:38:59.642386-00:00      391 Query use `testdb`
    2020-06-24T07:38:59.642531-00:00      391 Query select @@collation_database                              <---------- 查询当前数据库级别的字符集校对规则
    2020-06-24T07:38:59.642737-00:00      391 Query SHOW TRIGGERS LIKE 'sbtest2'                             <---------- 查看 sbtest2 表是否存在触发器需要备份 ( 参数 --triggers 的作用 )
    2020-06-24T07:38:59.643297-00:00      391 Query SET SESSION character_set_results = 'utf8'
    2020-06-24T07:38:59.643458-00:00      391 Query ROLLBACK TO SAVEPOINT sp                                 <---------- 回滚到保存 sp 状态的时间
    2020-06-24T07:38:59.643585-00:00      391 Query RELEASE SAVEPOINT sp                                     <---------- 释放命名为 sp 的状态位点
    2020-06-24T07:38:59.643730-00:00      391 Query use `testdb`
    2020-06-24T07:38:59.643892-00:00      391 Query select @@collation_database
    2020-06-24T07:38:59.644069-00:00      391 Query SET SESSION character_set_results = 'binary'
    2020-06-24T07:38:59.644244-00:00      391 Query SHOW FUNCTION STATUS WHERE Db = 'testdb'                 <---------- 查看 testdb 库是否存在函数需要备份
    2020-06-24T07:38:59.649984-00:00      391 Query SHOW PROCEDURE STATUS WHERE Db = 'testdb'                <---------- 查看 testdb 库是否存在存储过程需要备份
    2020-06-24T07:38:59.651970-00:00      391 Query SET SESSION character_set_results = 'utf8'
    2020-06-24T07:38:59.658759-00:00      391 Quit                                                              <---------- 连接退出
  • 相关阅读:
    (转)S5PV210之UBOOT2011.06启动过程解析
    (转)S5PV2101210启动方式和代码前16字节
    (转)UBoot启动过程详细版的完全分析
    uboot中.lds连接脚本文件的分析
    makefile中的@
    (转)GNU ARM汇编(十七)uboot的makefile和mkconfig解读
    (转)关于uboot中的.balignl 16,0xdeadbeef的理解
    (转)ARM协处理学习
    linux下拷贝的时候有时候会出现cp:omitting directory的错误
    Quartz JobListener 任务监听器
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/13358970.html
Copyright © 2020-2023  润新知