当前位置:网站首页>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会直到事务提交才会释放,在做表结构变更的时候,一定要小心不要导致锁住线上查询和更新
边栏推荐
- orgchart. JS organization chart, presenting structural data in an elegant way
- Objective C message dispatch mechanism
- CIS benchmark tool Kube bench
- 2022.6.20-6.26 AI行业周刊(第103期):新的小生命
- 14 MySQL-视图
- Cwaitabletimer timer, used to create timer object access
- GFS Distributed File System
- MySQL replace primary key delete primary key add primary key
- 用列表初始化你的vector&&initializer_list简介
- Bao Yan notebook IV software engineering and calculation volume II (Chapter 8-12)
猜你喜欢

CIS基准测试工具kube-bench使用

Spire. PDF for NET 8.7.2

Redis高可用——主从复制、哨兵模式、集群

Rasa 3.x 学习系列-Rasa 3.2.1 新版本发布

多普勒效应(多普勒频移)

Live tiktok shop 2022 latest gameplay card slot overseas live e-commerce new traffic

Qt QPushButton详解

SpreadJS 15.1 CN 与 SpreadJS 15.1 EN

Laser slam learning record

CAS and synchronized knowledge
随机推荐
Make a short video clip number of we media film and television. Where can I download the material?
跟着CTF-wiki学pwn——ret2libc1
保研笔记四 软件工程与计算卷二(8-12章)
The PostgreSQL column reference 'ID' is ambiguous - PostgreSQL column reference'id'is ambiguous
【SQL】各主流数据库sql拓展语言(T-SQL 、 PL/SQL、PL/PGSQL)
Open3D 点云随机添加噪声
Use mapper: --- tkmapper
Dynamic planning: robbing families and houses
【EF Core】EF Core与C# 数据类型映射关系
698. Divided into k equal subsets ●●
Live tiktok shop 2022 latest gameplay card slot overseas live e-commerce new traffic
21.PWM应用编程
idea 连接mysql ,直接贴配置文件的url 比较方便
20220703 week race: number of people who know the secret - dynamic rules (problem solution)
Rasa 3.x 学习系列-Rasa X 社区版(免费版) 更改
如何提升口才
CIS benchmark tool Kube bench
Online yaml to CSV tool
How to improve eloquence
Difference between out of band and in band