当前位置:网站首页>mysql-全局锁和表锁
mysql-全局锁和表锁
2022-07-05 23:38:00 【阿杜】
MYSQL里面的锁可以分为:全局锁,表级锁,行级锁
1 全局锁
对整个数据库实例加锁
MYSQL提供全局读锁的方法:Flush tables with read lock(FTWRL)
这个命令可以使整个库处于只读状态,使用该命令后后,数据更新语句、数据定义语句和更新类事务的提交语句等操作都会被阻塞
1.1 使用场景
全局逻辑备份
风险:
- 如果主库备份,在备份期间不能更新,业务摆停
- 如果从库备份,备份期间不能执行主库同步的binlog,导致主从延迟
官方自带的逻辑备份工具mysqlddump,当mysqldump 使用参数–single-transaction的时候,会启动一个事务,确保拿到一致性视图。由于MVCC的支持,这个过程中的数据时可以正常更新的
一致性读是好,但前提是引擎要支持这个隔离级别
如果要全库只读,为什么不使用set global readonly=true的方式???
1 在有些系统中,readonly的值会被用做其它逻辑,比如判断主备库。所以修改global变量的方式影响太大
2 在异常处理机制上有差异,如果执行FTWRL命令之后由于客户端发生异常断开,那么MYSQL会自动释放这个全局锁,整个库可以回到正常更新的状态。而将整个库设置为readonly之后,如果客户端发生异常,则数据库会一直保持readonly状态,这样会导致整个库长时间处于不可写状态,风险较高
2 表级锁
MYSQL里面的表级锁有两种,一种是表锁,一种是元数据锁(meta data lock, MDL)
2.1 表锁
表锁的语法: lock tables…read/write
可以使用unlock tables 主动释放锁,也可以在客户端断开的时候自动释放。lock tables语法除了会限制别的线程的读写外,也限定了本线程接下来的操作对象
对于InnoDB这种支持行锁的引擎,一般 不使用lock tables命令来控制并发,毕竟锁住整个表的影响还是很大。
2.2 MDL
不需要显式使用,在访问一个表的时候会自动加上
作用:保证读写的正确性
1 在对一个表做增删改查操作的时候,加MDL读锁
2 对表结构变更操作的时候,加MDL写锁
3 读锁之间不互斥
4 读写锁之间,写锁之间是互斥的,用来保证变更表架构操作的安全性
5 MDL会直到事务提交才会释放,在做表结构变更的时候,一定要小心不要导致锁住线上查询和更新
边栏推荐
- 424. The longest repeated character after replacement ●●
- Go language introduction detailed tutorial (I): go language in the era
- Golang code checking tool
- Fiddler Everywhere 3.2.1 Crack
- Bao Yan notes II software engineering and calculation volume II (Chapter 13-16)
- 【luogu CF487E】Tourists(圆方树)(树链剖分)(线段树)
- Attacking technology Er - Automation
- Make a short video clip number of we media film and television. Where can I download the material?
- Online yaml to CSV tool
- The interface of grafana tool displays an error, incluxdb error
猜你喜欢
Rasa 3. X learning series -rasa x Community Edition (Free Edition) changes
CIS benchmark tool Kube bench
Part III Verilog enterprise real topic of "Niuke brush Verilog"
Online yaml to CSV tool
CIS基准测试工具kube-bench使用
Zero rhino technology joined hands with the intelligence Club: the "causal faction" forum was successfully held, and the "causal revolution" brought the next generation of trusted AI
TVS管 与 稳压二极管参数对比
用列表初始化你的vector&&initializer_list简介
GFS分布式文件系統
Initialize your vector & initializer with a list_ List introduction
随机推荐
Spire Office 7.5.4 for NET
Qt QPushButton详解
Zero rhino technology joined hands with the intelligence Club: the "causal faction" forum was successfully held, and the "causal revolution" brought the next generation of trusted AI
Which side projects can be achieved? Is it difficult for we media to earn more than 10000 a month?
Comparison of parameters between TVs tube and zener diode
el-cascader的使用以及报错解决
XML配置文件(DTD详细讲解)
Qcombox (rewrite) + qcompleter (auto completion, auto loading the drop-down options of qcombox, setting the background color)
Use CAS instead of synchronized
C # input how many cards are there in each of the four colors.
698. 划分为k个相等的子集 ●●
激光slam学习记录
698. Divided into k equal subsets ●●
Opencvsharp (C openCV) shape detection and recognition (with source code)
保研笔记四 软件工程与计算卷二(8-12章)
CloudCompare&PCL 点云随机添加噪声
SpreadJS 15.1 CN 与 SpreadJS 15.1 EN
JVM details
[EF core] mapping relationship between EF core and C data type
Neural structured learning - Part 2: training with natural graphs