MySQLdump之single-transaction详解

MySQLdump之single-transaction详解

single-transaction

  • 开启general log选项
  1. 查看目前general log的情况
mysql> show variables like '%general_log%';
+------------------+--------------------------------------------+
| Variable_name    | Value                                      |
+------------------+--------------------------------------------+
| general_log      | OFF                                        |
| general_log_file | /data/mysqldata/3306/general_statement.log |
+------------------+--------------------------------------------+
2 rows in set (0.00 sec)
  1. 开启general log的选项
mysql> set global general_log=on;
  1. 使用mysqldump命令:。
[mysql@racnode1 ~]$ /usr/local/mysql/bin/mysqldump -uroot -p'zsd@7101' -S /data/mysqldata/3306/mysql.sock --single-transaction --default-character-set=utf8 zdemo student > /tmp/studentbackup.sql

其中使用了两个参数

  • --single-transaction
      此选项会将隔离级别设置为:REPEATABLE READ。并且随后再执行一条START TRANSACTION语句,让整个数据在dump过程中保证数据的一致性,这个选项对InnoDB的数据表很有用,且不会锁表。但是这个不能保证MyISAM表和MEMORY表的数据一致性。
      为了确保使用--single-transaction命令时,保证dump文件的有效性。需没有下列语句ALTER TABLE, CREATE TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE,因为一致性读不能隔离上述语句。所以如果在dump过程中,使用上述语句,可能会导致dump出来的文件数据不一致或者不可用。
      如何验证上述的过程呢,可以开启general log看看过程是否如上述所说。

  • --default-character-set=utf8
    导出的dump文件字符集为uft8,检验文件字符集的命令可以使用file -i

通用查询日志文件如下:

2018-06-18T11:42:31.035205Z      9163 Query     /*!40100 SET @@SQL_MODE='' */
2018-06-18T11:42:31.036090Z      9163 Query     /*!40103 SET TIME_ZONE='+00:00' */
2018-06-18T11:42:31.036905Z      9163 Query     /*!80000 SET SESSION information_schema_stats_expiry=0 */
2018-06-18T11:42:31.037521Z      9163 Query     SET SESSION NET_READ_TIMEOUT= 700, SESSION NET_WRITE_TIMEOUT= 700
2018-06-18T11:42:31.038398Z      9163 Query     SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
2018-06-18T11:42:31.038977Z      9163 Query     START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */
2018-06-18T11:42:31.039859Z      9163 Query     SHOW VARIABLES LIKE 'gtid\_mode'
2018-06-18T11:42:31.058093Z      9163 Query     UNLOCK TABLES
中间日志省略
......
2018-06-18T11:42:31.084432Z      9163 Query     SAVEPOINT sp
2018-06-18T11:42:31.087632Z      9163 Query     show create table `student`
2018-06-18T11:42:31.088094Z      9163 Query     SET SESSION character_set_results = 'utf8'
2018-06-18T11:42:31.088407Z      9163 Query     show fields from `student`
2018-06-18T11:42:31.092360Z      9163 Query     show fields from `student`
2018-06-18T11:42:31.094718Z      9163 Query     SELECT /*!40001 SQL_NO_CACHE */ * FROM `student`
2018-06-18T11:42:32.815435Z      9163 Query     ROLLBACK TO SAVEPOINT sp
2018-06-18T11:42:32.815546Z      9163 Query     RELEASE SAVEPOINT sp

从上述日志分析:
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ 设置隔离级别为REPEATABLE READ
START TRANSACTION 开启了事务
  事务的实现是通过InnoDB存储引擎的MVCC机制事项,细节如下:InnoDB是一个多版本控制的存储引擎。它可以对已修改的行保留一个旧版本的数据信息。用于支持事务特性。例如:并发和数据回滚。这个信息保留在数据结构中的表空间中,这个表空间称之为rollback segment回滚段。(在Oracle中也有一种类似的数据结构)。
  当事务需要回滚的时候,InnoDB会使用回滚段的信息,用于执行undo操作。对于某一行,InnoDB会用早先版本的信息来保障读一致性(consistent read)。
  Undo日志在回滚段(rollback segment)中被分为两部分,一部分叫做插入undo日志(insert undo logs),另外一部分叫做更新undo日志(update undo logs)。插入undo日志只用于事务回滚,如事务一旦提交,那么日志就可以被丢弃。更新undo日志用在读一致性,InnoDB会指定一个数据快照,这个快照的构建来自于更新undo日志中数据行的早期版本。通过数据行早期版本的快照来保证读一致性,如果不需要这种事务数据保护的时候,这个日志可以被丢弃。

保存点的日志分析

SAVEPOINT SP
......中间日志省略...
SELECT /*!40001 SQL_NO_CACHE */ * FROM `student`
......中间日志省略...
ROLLBACK TO SAVEPOINT sp
RELEASE SAVEPOINT sp

可以看到通过REPEATABLE READ事务,保证数据一致性数据,然后
设置保存点sp,当读取了所有数据的快照,就回退这个保存点sp。可以比喻为游戏中存档之后,然后取档备份成一个游戏外的文件,删除这个档。可以当作这个档在这个游戏内不存在。

查看当前会话级别

## 会话级当前事务级别
mysql> show variables like '%isolation%';
+-----------------------+-----------------+
| Variable_name         | Value           |
+-----------------------+-----------------+
| transaction_isolation | REPEATABLE-READ |
+-----------------------+-----------------+
1 row in set (0.03 sec)
## 系统全局级当前事务级别
mysql> show global variables like '%isolation%';
+-----------------------+-----------------+
| Variable_name         | Value           |
+-----------------------+-----------------+
| transaction_isolation | REPEATABLE-READ
+-----------------------+-----------------+
1 row in set (0.11 sec)
## 修改全局级事务级别
mysql>set global transaction_isolation='read-committed'

就算修改了全局事务级别,Mysqldump导出时也会设定隔离事务级别为:REPEATABLE READ。用于保证数据的读一致性。

导出文件的字符集类型

[mysql@racnode1 tmp]$ file -i studentbackup.sql
studentbackup.sql: text/plain; charset=utf-8

posted on 2018-06-18 21:06 东瑜 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/zhangshengdong/p/9196128.html

MySQLdump之single-transaction详解相关推荐

  1. java 高并发第三阶段实战_Java 高并发第三阶段实战---Java并发包深入解析与使用详解...

    第三阶段的课程主要围绕着Java并发包的使用,展开详细的介绍,主要内容有1.原子包源码剖析,2.并发包工具类详细介绍,3.线程服务以及Future和callable等详细介绍,4.高并发容器和阻塞容器 ...

  2. Java 高并发第三阶段实战---Java并发包深入解析与使用详解

    第三阶段的课程主要围绕着Java并发包的使用,展开详细的介绍,主要内容有1.原子包源码剖析,2.并发包工具类详细介绍,3.线程服务以及Future和callable等详细介绍,4.高并发容器和阻塞容器 ...

  3. mysqldump 备份详解

    文章目录 前言 常用模版 1. 备份整个实例 2. 备份单个数据库 3. 导出单表结构与数据 4. 仅导出单表数据 5. 仅导出单表部分数据 6. 某库下表结构导出 备份上云 1. DEFINER 问 ...

  4. mysqldump全量恢复_删库不跑路-详解MySQL数据恢复

    日常工作中,总会有因手抖.写错条件.写错表名.错连生产库造成的误删库表和数据的事情发生,那么,如果连数据都恢复不了,还要什么 DBA. 相关文章 MySQL备份策略:https://segmentfa ...

  5. mysqldump使用详解

    Mysql常用命令详解 Mysql安装目录 数据库目录 /var/lib/mysql/ 配置文件 /usr/share/mysql(mysql.server命令及配置文件) 相关命令 /usr/bin ...

  6. 简述mysql完全备份过程_【SQL】MySQL之使用mysqldump全备份及恢复过程详解_MySQL

    mysqldump bitsCN.com [SQL]MySQL之使用mysqldump全备份及恢复过程详解 [目标]使用mysqldump做全备,结合mysql自带的binlog功能实现增量备份 为了 ...

  7. 04-mysql数据备份之mysqldump命令详解

    MYSQL数据备份之mysqldump命令详解 一.mysqldump 简介 mysqldump 是 MySQL 自带的逻辑备份工具. 它的备份原理是通过协议连接到 MySQL 数据库,将需要备份的数 ...

  8. MySQL操作mysqldump命令详解

    MySQL操作mysqldump命令详解 基本命令: # 数据库备份-->mysqldump命令默认做锁表操作 mysqldump -uroot -ppassword --all-databas ...

  9. MYSQLDUMP参数详解 --all-databases

    MYSQLDUMP参数详解 mysqldump客户端可用来转储数据库或搜集数据库进行备份或将数据转移到另一个SQL服务器(不一定是一个MySQL服务器).转储包含创建表和/或装载表的SQL语句. 如果 ...

最新文章

  1. python安装环境配置linux_linux下安装python环境
  2. Visual Studio 2022编译x86 或者 win32程序时的错误MSB6006
  3. 鸿蒙系统第二款产品,鸿蒙OS第二款产品 “华为智慧屏”在Mate 30系列发布会上亮相...
  4. django mysql connector,MySQL Connector / Python作为Django引擎?
  5. Python爬虫快速入门,BeautifulSoup基本使用及实践
  6. 计算机网络严楠,安徽工程大学
  7. html中h标签可包含a标签,HTML中H标签P标签(Paragraph)img标签(image)a标签(anchor)
  8. ArcGIS Maritime Server 开发教程(六)Maritime Service 开发技巧
  9. Docker删除/停止容器
  10. 11月3日 迅雷白金会员vip账号分享 91freevip 23:00更新
  11. NodeJs之npm
  12. 信捷plc用c语言编程软件,XDPPro(信捷PLC编程软件) V3.1.0c 官方版
  13. 计算机的硬盘材料,电脑坏了把硬盘资料转移到新硬盘的方法
  14. 计算机怎么删除表格,EXCEL如何删除表格内容中的部分文本
  15. NXP智能车竞赛笔记(室外电磁组)
  16. 百色职称计算机,百色报考职称高级
  17. MVC 模式已死?何不试试 MOVE
  18. rectpuls函数 matlab,Matlab中的rectpuls函数解析
  19. 2018,AI旗舰启程出发!自动化所全球AI邀请函
  20. 手机评测 三星V-208

热门文章

  1. scrapy 中爬取时被重定向_Scrapy详解之scrapy shell
  2. 计算机网络联网方法实验报告,计算机网络技术》实验报告.doc
  3. Spark内核解析之一:内核概述
  4. 模块 datetime
  5. 标准模块 os.stat
  6. 病毒行为分析初探(二)
  7. Sql Server 2014 双节点群集无法切到其中一节点解决
  8. python 安装setuptools时报Compression requires the (missing) zlib module错误的解决方案
  9. vmware使用已有linux系统的物理磁盘分区
  10. 已有记录表添加特定排序主键ID