首页 > 数据库 >[转帖]MySQLdump之single-transaction详解

[转帖]MySQLdump之single-transaction详解

时间:2024-04-25 13:23:05浏览次数:24  
标签:transaction 06 42 转帖 single 2018 Query 18T11 9163

 

作者:@张扶摇
本文为作者原创,转载请注明出处:https://www.cnblogs.com/zhangshengdong/p/9196128.html


目录

MySQLdump之single-transaction详解
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


感谢您的阅读,如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮。本文欢迎各位转载,但是转载文章之后必须在文章页面中给出作者和原文连接

标签:transaction,06,42,转帖,single,2018,Query,18T11,9163
From: https://www.cnblogs.com/jinanxiaolaohu/p/18157461

相关文章

  • Java开启事务(@Transactional)
    开始事务的代码可以使用Spring的事务管理器来实现。具体步骤如下:1.在Spring配置文件中配置事务管理器和事务通知器:```<beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><propertyname="dataSource"ref="......
  • [转帖]MySQL知识体系的三驾马车
    https://plantegg.github.io/2019/05/26/MySQL%E7%9F%A5%E8%AF%86%E4%BD%93%E7%B3%BB%E7%9A%84%E4%B8%89%E9%A9%BE%E9%A9%AC%E8%BD%A6/ MySQL知识体系的三驾马车在我看来要掌握好MySQL的话要理解好这三个东西:索引(B+树)日志(WAL)事务(可见性)索引决定了查询的性能,也是用......
  • [转帖]十年拉锯战终结束,Google 赢得 Java API 版权诉讼
    https://www.oschina.net/news/136073/googles-wins-lawsuit Google和Oracle(甲骨文)在法庭上就Android操作系统中Java编程语言的使用问题争吵了十年。美国最高法院在周一以6比2的投票结果裁定,Google对Java代码的使用被归为"合理使用",没有违反联邦版权法......
  • [转帖]Oracle 败了、谷歌赢了:Java API 版权案最终裁决
    https://zhuanlan.zhihu.com/p/362496136 周一,最高法院在Oracle围绕移动操作系统Android中所用软件的一起旷日持久的版权诉讼中判谷歌胜诉。法院的判决为6比2。大法官AmyConeyBarrett没有参与此案。该案涉及谷歌用于构建Android的12000行代码,这些代码是从SunMicrosy......
  • WPF implemented Single Instance via mutex and activated the existed window via
    1.RemoveStartUri="MainWindow.xaml"inApp.xaml;2.IntheApp.xaml.cs,overriveasbelowusingSystem;usingSystem.Collections.Generic;usingSystem.Configuration;usingSystem.Data;usingSystem.Linq;usingSystem.Runtime.InteropServices;usin......
  • [转帖]linux命令top内存显示M兆或者G
     转载自:https://zhuanlan.zhihu.com/p/42665560===============许多Linux命令现在都有使其输出更易于理解的选项。让我们了解一些可以让我们心爱的操作系统更友好的东西。不是每个人都以二进制方式思考,他们不想在大脑中给大数字插入逗号来了解文件的大小。因此,Linux命令......
  • 浅谈@Transactional 注解的使用
    在SpringBoot的开发项目中,在Controller控制层,我们一般只做入参的校验;在Service服务层,我们把业务逻辑都写在这里,在服务层的方法中,我们会调用其它的服务层接口或者mapper层方法,所以,需要在服务层的方法上,我们需要增加:@Transactional(rollbackFor=Exception.class)添加该注解后......
  • [转帖]MiSans字库GB18030标准验证情况
    https://zhuanlan.zhihu.com/p/663626158  提供的信息,手机厂商终于见到跨入GB18030-2022实现级别3的进步。 MiSans网站提供两个汉字库下载和使用,MiSansFAQ也告知只要升级去XiaomiHyperOS后,已可完整支持。MiSansL3字体有以下说明:MiSans新增60340字符符合GB180......
  • [转帖]性能专题:一文搞懂性能测试常见指标
    https://developer.aliyun.com/article/725602 简介: 1.前言上周,对性能测试系列专题,在公号内发表了第一篇介绍:【性能系列连载一】开篇:性能测试不可不知的“干货”,但反响貌似并不太好,但既然此前已答应了部分读者要连载分享性能这块的知识,含着泪也得继续写。1.前言上周......
  • SingleFile 自动保存设置
    选项里1在页面加载完成后或开始卸载时进行自动保存选中这个之后,会保存两次。经测试,应该是代表下边这俩23各一次。取消选中这个,然后选择2,就只保存一次了2在页面加载完成后进行自动保存。3在页面开始卸载时进行自动保存  右上角图表右键里边还有个自动保存选项,这两个位置......