my07_lock-tables与single-transaction的区别
概念描述
************************************************************
mysqldump进行逻辑备份时(innodb),为保证事务的一致性,会进行加锁,通常使用以下两个参数,
锁定一个schema对象中的所有表,默认开启,可保证一个库中所有表的状态一致
-l, --lock-tables Lock all tables for read.(Defaults to on; use --skip-lock-tables to disable.)
必须是innodb存储引擎,备份过程中不能出现DDL语句,使用该参数则自动关闭lock-tables参数
--single-transaction
Creates a consistent snapshot by dumping all tables in a single transaction. Works ONLY for tables stored in storage engines which support multiversioning (currently only InnoDB does); the dump is NOT guaranteed to beconsistent for other storage engines. While a
--single-transaction dump is in process, to ensure a valid dump file (correct table contents and binary log position), no other connection should use the following statements: ALTER TABLE, DROP TABLE, RENAME TABLE,TRUNCATE TABLE, as consistent snapshot is not isolated from them. Option automatically turns off --lock-tables.
补充说明:因为single-transaction 使用了“ a consistent snapshot”一致性快照,它除了在开始生成一致性快照时锁定所有表外(很小的一段时间,几秒或者更小),在后续备份到某个表时才会锁定某个表,因此它对线上业务影响小,为在线备份推荐选项
测试准备
*********************************************************************
就是设计一套测试方案,来验证一下以上的观点
两台虚拟机,分别做时间校准,red6是mysql数据库(5.7.22版本),red4是备份恢复机
[root@red6 network-scripts]# /sbin/ntpdate 182.92.12.11
30 Jul 14:40:52 ntpdate[7592]: step time server 182.92.12.11 offset 182.635092 sec
[root@red4 ~]# /sbin/ntpdate 182.92.12.11
30 Jul 14:38:04 ntpdate[10222]: adjust time server 182.92.12.11 offset 0.002791 sec
创建测试用户
create database txdb character set utf8;
create user 'automng'@'%' identified by 'Automng_123';
ALTER USER 'automng'@'%' IDENTIFIED WITH mysql_native_password BY 'Automng_123';
GRANT ALL PRIVILEGES ON *.* TO 'automng'@'%' WITH GRANT OPTION;
sysbench初始化数据,50张表,每张5万数据
sysbench --test=/opt/soft/sysbench/sysbench/tests/db/parallel_prepare.lua --oltp-tables-count=50 --oltp-table-size=50000 --num-threads=2 --mysql-table-engine=innodb --mysql-user=automng --mysql-password=Automng_123 --mysql-port=3318 --mysql-host=192.168.56.201 --mysql-db=txdb run
sysbench --test=/opt/soft/sysbench/sysbench/tests/db/parallel_prepare.lua --oltp-tables-count=50 --oltp-table-size=50000 --num-threads=2 --mysql-table-engine=innodb --mysql-user=automng --mysql-password=Automng_123 --mysql-port=3318 --mysql-host=192.168.56.201 --mysql-db=txdb cleanup
lock-tables备份语句
/usr/local/mysql/bin/mysqldump -h$host -uautomng -pAutomng_123 -P$port --log-error=$bkdir/$today_bklog --set-gtid-purged=OFF --add-drop-database --add-drop-table --flush-logs --lock-tables --triggers --routines --events --flush-privileges --master-data=2 --default-character-set=$charset $db_name > $bkdir/$today_bkfile
准备好的更新测试语句
select now();
update sbtest10 set pad='wa ka ka' where id=11;
select now();
update sbtest10 set pad='1234567' where id=12;
select now();
update sbtest10 set pad='wa ka ka' where id=13;
select now();
update sbtest10 set pad='1234567' where id=14;
select now();
single-transaction备份语句
/usr/local/mysql/bin/mysqldump -h$host -uautomng -pAutomng_123 -P$port --log-error=$bkdir/$today_bklog --set-gtid-purged=OFF --add-drop-database --add-drop-table --flush-logs --single-transaction --triggers --routines --events --flush-privileges --master-data=2 --default-character-set=$charset $db_name > $bkdir/$today_bkfile
准备好的更新测试语句
select now();
update sbtest21 set pad='wa ka ka' where id=21;
select now();
update sbtest31 set pad='1234567' where id=22;
select now();
update sbtest41 set pad='wa ka ka' where id=23;
select now();
update sbtest41 set pad='1234567' where id=24;
select now();
备份过程在脚本中进行,会自动打印出备份的起始时间
lock-tables参数测试
********************************************************
备份的起始时间
start backup txdb 2018-07-30 14:53:53
end backup 2018-07-30 14:54:32
DML语句的执行,手工复制所有语句,一次性粘贴到SQL命令行
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2018-07-30 14:53:58 |
+---------------------+
1 row in set (0.04 sec) mysql> update sbtest10 set pad='wa ka ka' where id=11; Query OK, 1 row affected (33.98 sec)
Rows matched: 1 Changed: 1 Warnings: 0 mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2018-07-30 14:54:32 |
+---------------------+
1 row in set (0.00 sec) mysql> update sbtest10 set pad='' where id=12;
Query OK, 1 row affected (0.17 sec)
Rows matched: 1 Changed: 1 Warnings: 0 mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2018-07-30 14:54:32 |
+---------------------+
1 row in set (0.00 sec) mysql> update sbtest10 set pad='wa ka ka' where id=13;
Query OK, 1 row affected (0.14 sec)
Rows matched: 1 Changed: 1 Warnings: 0 mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2018-07-30 14:54:32 |
+---------------------+
1 row in set (0.00 sec) mysql> update sbtest10 set pad='' where id=14;
Query OK, 1 row affected (0.11 sec)
Rows matched: 1 Changed: 1 Warnings: 0 mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2018-07-30 14:54:32 |
+---------------------+
1 row in set (0.00 sec) mysql>
mysql>
mysql> show warnings;
Empty set (0.03 sec)
由于DML每条语句的执行几乎不耗时,而第一条语句的结束时间与备份的结束时间完全吻合。印证了以上lock-tables锁全表的观点完全。
single-transaction参数测试
*******************************************************************
备份的起止时间
start backup txdb 2018-07-30 15:20:33
end backup 2018-07-30 15:21:22
DML语句的执行,手工复制所有语句,一次性粘贴到SQL命令行
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2018-07-30 15:20:37 |
+---------------------+
1 row in set (0.00 sec) mysql> update sbtest21 set pad='wa ka ka' where id=21;
Query OK, 1 row affected (0.35 sec)
Rows matched: 1 Changed: 1 Warnings: 0 mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2018-07-30 15:20:38 |
+---------------------+
1 row in set (0.00 sec) mysql> update sbtest31 set pad='' where id=22;
Query OK, 1 row affected (0.09 sec)
Rows matched: 1 Changed: 1 Warnings: 0 mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2018-07-30 15:20:38 |
+---------------------+
1 row in set (0.01 sec) mysql> update sbtest41 set pad='wa ka ka' where id=23;
Query OK, 1 row affected (0.07 sec)
Rows matched: 1 Changed: 1 Warnings: 0 mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2018-07-30 15:20:38 |
+---------------------+
1 row in set (0.00 sec) mysql> update sbtest41 set pad='' where id=24;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0 mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2018-07-30 15:20:38 |
+---------------------+
1 row in set (0.00 sec)
33秒开始备份,37秒开始执行DML,38秒时执行完毕,DML没有被事务锁阻塞。印证了single-transaction不是锁定所有表的观点。
补充说明,该验证方法是以抽样的形式(随机测试了其中一张表),从“结论的角度(lock-tables 会锁一个schema的所有表,另外一个则不会)”验证,并不严谨,但有一定参考价值。
my07_lock-tables与single-transaction的区别的更多相关文章
- First,FirstOrDefault,Single,SingleOrDefault的区别
操作符 如果源序列是空的 源序列只包含一个元素 源序列包含多个元素 First 抛异常 返回该元素 返回第一个元素 FirstOrDefault 返回default(TSource) 返回该元素 返回 ...
- java transient关键字和transaction的区别
transient:表示临时的,不会被持久化,保存进数据库 transaction:表示事务 <div style="background: #fff; color: #0ff;&qu ...
- List中函数用法 First,FirstOrDefault,Single,SingleOrDefault的区别
操作符 如果源序列是空的 源序列只包含一个元素 源序列包含多个元素 First 抛异常 返回该元素 返回第一个元素 FirstOrDefault 返回default(TSource) 返回该元素 返回 ...
- EntityFramework First,FirstOrDefault,Single,SingleOrDefault的区别
操作符 如果源序列是空的 源序列只包含一个元素 源序列包含多个元素 First 抛异常 返回该元素 返回第一个元素 FirstOrDefault 返回default(TSource) 返回该元素 返回 ...
- [转]Wrapping multiple calls to SaveChanges() in a single transaction
本文转自:http://www.binaryintellect.net/articles/165bb877-27ee-4efa-9fa3-40cd0cf69e49.aspx When you make ...
- loadrunner 中Error和failed transaction 的区别
Down:没有运行 Pending:挂起 Init:初始化 Ready:准备就绪 Run:正在运行 Rendezvous:正在集结 Passed:运行通过 Failed:运行失败 Error:出现故障 ...
- sql server中index的REBUILD和REORGANIZE的区别及工作方式
sql server中index的REBUILD和REORGANIZE 转自:https://www.cnblogs.com/flysun0311/archive/2013/12/05/3459451 ...
- MySQL 5.6 Reference Manual-14.3 InnoDB Transaction Model and Locking
14.3 InnoDB Transaction Model and Locking 14.3.1 InnoDB Lock Modes 14.3.2 InnoDB Record, Gap, and Ne ...
- .Net系列 Transaction 事务
Transactions 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit).在计算机术语中,事务通常就是指数 ...
随机推荐
- iOS 打包生成ipa文件(使用终端命令打包)
1. 打开终端 2.在终端输入cd +空格 把工程文件直接拖到终端,然后回车 3. 在终端输入xcodebuild,回车 然后你可以发现工程文件里多了一个build文件夹 在build文件夹中,有一个 ...
- Luogu 3267 [JLOI2016/SHOI2016]侦察守卫
以后要记得复习鸭 BZOJ 4557 大佬的博客 状态十分好想,设$f_{x, i}$表示以覆盖完$x$为根的子树后还能向上覆盖$i$层的最小代价,$g_{x, i}$表示以$x$为根的子树下深度为$ ...
- CF702E Analysis of Pathes in Functional Graph
倍增练习题. 基环树上倍增一下维护维护最小值和权值和,注意循环的时候$j$这维作为状态要放在外层循环,平时在树上做的时候一个一个结点处理并不会错,因为之前访问的结点已经全部处理过了. 时间复杂度$O( ...
- 数据结构_成绩查询_cjcx
问题描述 录入 n 个学生的成绩,并查询.★数据输入第一行输入包括 n. m(1<=n<=50,000,1<=m<=100,000)两个数字.接下来 n 行,每行包含名字和成绩 ...
- C/C++中char* p = "hello" 和 const char* p = "hello"的区别
在写代码常常都会写char * p ="hello";这样的代码,虽然不是错误,但却不建议这样用.应该加const修饰.这句话背后的内涵是什么?下面就刨根问底一下:) 这个行为在不 ...
- SQL/T-SQL实例参考-1
CASE ,D.[Score] B_Score ,'Distince'= CASE WHEN C.Score > D.Score THEN C.[Score] - D.[Score] WHEN ...
- UC浏览器体验
1.用户界面: 有两个页面,一个展示网页应用-可添加自己喜欢的网页应用,另一个用来搜索,有推荐的常用的网址,有UC头条,页面下有设置,整体布局常规 2.短期刺激: 没有特别花哨的地方:个人感觉比较实用 ...
- Summer Holiday 强连通
Problem Description To see a World in a Grain of Sand And a Heaven in a Wild Flower, Hold Infinity i ...
- shell脚本编程的10个最佳实践
摘要:每一个在UNIX/Linux上工作的程序员可能都擅长shell脚本编程.对于那些处在shell脚本编程初级阶段的程序员来说,遵循一些恰当的做法可以帮助你更快.更好的学习这些编程技巧. 每一个在U ...
- VB-机房收费系统之Excel导出
敲机房很久了,感觉对代码的感知力终于有所提高了,很是开心.今天在敲学生充值记录查询的时候发现,其中有了新的知识, 这时候就该到了分析问题的时候了.不说废话了! 首先 保证自己的笔记本或者电脑上必须有 ...