当前位置:网站首页>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会直到事务提交才会释放,在做表结构变更的时候,一定要小心不要导致锁住线上查询和更新
边栏推荐
- Brushless drive design -- on MOS drive circuit
- 98. Verify the binary search tree ●●
- 【SQL】各主流数据库sql拓展语言(T-SQL 、 PL/SQL、PL/PGSQL)
- Initialize your vector & initializer with a list_ List introduction
- poj 2762 Going from u to v or from v to u? (infer whether it is a weak link diagram)
- 18.(arcgis api for js篇)arcgis api for js点采集(SketchViewModel)
- PV静态创建和动态创建
- C file and folder operation
- 11gR2 Database Services for " Policy" and " Administrator" Managed databases (file I
- Convert Chinese into pinyin
猜你喜欢
Senparc.Weixin.Sample.MP源码剖析
Neural structured learning 4 antagonistic learning for image classification
Spreadjs 15.1 CN and spreadjs 15.1 en
Dynamic planning: robbing families and houses
Redis high availability - master-slave replication, sentinel mode, cluster
Attacking technology Er - Automation
保研笔记一 软件工程与计算卷二(1-7章)
开源crm客户关系统管理系统源码,免费分享
JVM details
Neural structured learning - Part 2: training with natural graphs
随机推荐
【SQL】各主流数据库sql拓展语言(T-SQL 、 PL/SQL、PL/PGSQL)
零犀科技携手集智俱乐部:“因果派”论坛成功举办,“因果革命”带来下一代可信AI
15 MySQL-存储过程与函数
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
VBA fast switching sheet
如何让同步/刷新的图标(el-icon-refresh)旋转起来
Spire. PDF for NET 8.7.2
保研笔记四 软件工程与计算卷二(8-12章)
MySQL delete uniqueness constraint unique
98. Verify the binary search tree ●●
STM32__ 06 - single channel ADC
做自媒体影视短视频剪辑号,在哪儿下载素材?
QCombox(重写)+QCompleter(自动补全,自动加载qcombox的下拉选项,设置背景颜色)
Pyqt control part (I)
[SQL] SQL expansion languages of mainstream databases (T-SQL, pl/sql, pl/pgsql)
ts类型声明declare
有什么不起眼却挣钱的副业?
How to improve eloquence
Neural structured learning - Part 2: training with natural graphs
The PostgreSQL column reference 'ID' is ambiguous - PostgreSQL column reference'id'is ambiguous