首页 > 数据库 >Mysql中的--single-transaction会锁表吗

Mysql中的--single-transaction会锁表吗

时间:2023-02-17 11:22:40浏览次数:40  
标签:25 00 transaction 07 -- 08 single 05T16

当时用mysqldump配置主从的时候,要设置--single-transaction,这个参数将保证备份的数据库处于一致的状态
一般的备份语句如下:
mysqldump -uroot -S /data/3306/data/mysql.sock -p --all-databases --triggers --routines --events -e --single-transaction --quick --master-data=2 --set-gtid-purged=ON --max_allowed_packet=2G --net_buffer_length=16M --skip_tz-utc> /app/all.sql

打开general_log查看导致执行了那些语句


2021-07-05T16:25:16.158271+08:00 6 Connect root@localhost on using Socket
2021-07-05T16:25:16.158589+08:00 6 Query /*!40100 SET @@SQL_MODE='' */

--为了后续操作先进行flush table
--flush table的官方定义为Closes all open tables, forces all tables in use to be closed, and flushes the query cache and
prepared statement cache. FLUSH TABLES also removes all query results from the query cache, like the RESET QUERY CACHE statement。
2021-07-05T16:25:16.158895+08:00 6 Query FLUSH /*!40101 LOCAL */ TABLES

--如果flush table成功,表示这个时候没有任何session阻塞了备份(长查询,长事务都会阻塞备份)
--这时对整个数据库加read锁
2021-07-05T16:25:16.461454+08:00 6 Query FLUSH TABLES WITH READ LOCK

--成功后设置隔离级别为可重复读
2021-07-05T16:25:16.461663+08:00 6 Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ

--开启一个事务,并且设置WITH CONSISTENT SNAPSHOT为快照级别。如果只是可重复读,那么在事务开始时还没dump数据时,这时其他线程修改并提交了数据,那么这时第一次查询得到的结果是其他线程提交后的结果,而WITH CONSISTENT SNAPSHOT能够保证在事务开启的时候,第一次查询的结果就是事务开始时的数据A,即使这时其他线程将其数据修改为B,查的结果依然是A
2021-07-05T16:25:16.461767+08:00 6 Query START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */
2021-07-05T16:25:16.461983+08:00 6 Query SHOW VARIABLES LIKE 'gtid\_mode'
2021-07-05T16:25:16.462788+08:00 6 Query SELECT @@GLOBAL.GTID_EXECUTED

--上面的操作保证了对本事务来说,数据库现在是一致性的状态,这时可以放心的获取binlog的位置,将来cahnge master就从这个位置开始
2021-07-05T16:25:16.462960+08:00 6 Query SHOW MASTER STATUS
2021-07-05T16:25:16.463092+08:00 6 Query UNLOCK TABLES
--锁被释放
--后续的操作都不会再加任何锁定

2021-07-05T16:25:16.463253+08:00 6 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 GROUP BY LOGFILE_GROUP_NAME, FILE_NAME, ENGINE, TOTAL_EXTENTS, INITIAL_SIZE ORDER BY LOGFILE_GROUP_NAME
2021-07-05T16:25:16.465204+08:00 6 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
2021-07-05T16:25:16.465808+08:00 6 Query SHOW DATABASES
2021-07-05T16:25:16.466316+08:00 6 Query SHOW VARIABLES LIKE 'ndbinfo\_version'
2021-07-05T16:25:16.466849+08:00 6 Init DB mysql
2021-07-05T16:25:16.466976+08:00 6 Query SHOW CREATE DATABASE IF NOT EXISTS `mysql`
2021-07-05T16:25:16.467107+08:00 6 Query SAVEPOINT sp
2021-07-05T16:25:16.467226+08:00 6 Query show tables
2021-07-05T16:25:16.467542+08:00 6 Query show table status like 'columns\_priv'

总结:
1.--single-transaction会短暂加全局读锁,用来保证数据库处于一致性状态。
2.获取锁定会被其他长查询,长事务都会阻塞,所以备份最好在数据库不繁忙的 时候进行。
3.后续的数据导出不会加任何锁定,不影响应用执行。

标签:25,00,transaction,07,--,08,single,05T16
From: https://www.cnblogs.com/dba-oilz/p/17129478.html

相关文章

  • OpenCV对NV12进行通道分离后缩放再保存为NV12格式
    1.OpenCV对NV12进行通道分离后缩放再保存为NV12格式 #include<stdio.h>#include<opencv2/opencv.hpp>/***@brief*把输入的NV12图像分离为YUV三个分量图......
  • 标准ASCII编码表
    ASCII(AmericanStandardCodeforInformationInterchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代美式英语,并等同于国际标准ISO/IEC646......
  • windows字体问题
    windows字体问题(Win7)1.乱码某些Delphi写的软件字体乱码;区域/语言等全改美国/英语,然后再改成中国/中文,3个地方,以上操作完成后正常2.语言标识代码如中文0804#de......
  • mysql B+ 树与 Buffer Pool
    转自 https://lvwenhan.com/tech-epic/506.html内存缓存BufferPoolBufferPool是在MySQL启动的时候,向操作系统申请的一片连续的内存空间,默认为128MB,强烈建议任何......
  • AbstractCollection<E> implements Collection<E>
    AbstractCollection最小化实现Collection接口,需要自己实现iterator和size接口publicabstractIterator<E>iterator();publicabstractintsize();......
  • 003 - 投资组合最优化
    投资组合优化工具主要是基于资产管理行业的经典理论——现代投资组合理论(modernportfoliotheory,MPT)的基本原理。现代投资组合理论MPT的核心原理是,投资者一贯是风险厌恶......
  • .NET 纯原生实现 Cron 定时任务,未依赖第三方组件
    常用的定时任务组件有Quartz.Net和Hangfire两种,这两种是使用人数比较多的定时任务组件,个人以前也是使用的Hangfire,慢慢的发现自己想要的其实只是一个能够根据Cron......
  • Create port ip分配流程梳理
    Createportip分配流程梳理self.ipam.allocate_ips_for_port_and_store(context,port,port_id)#/usr/lib/python2.7/site-packages/neutron/db/ipam_pluggable_......
  • ABC 262
    ABC262D(简单dp)题意给定一个数组,问有多少个子数组,它的元素平均数为整数。即该子数组和能被子数组大小k整除思路因为数据范围只有100,所以暴力dp就行。代码intn,m;......
  • String hashcode()
    Stringhashcode()代码段publicinthashCode(){inth=hash;if(h==0&&value.length>0){charval[]=value;......