Mysql基础(五)锁
2021/11/24 2:09:53
本文主要是介绍Mysql基础(五)锁,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
锁
- 全局锁
- 全库逻辑备份的其他方案
- 方案一(最优)
- 方案二(最差)
- 表级锁
- 表锁
- 元数据锁(meta data lock,MDL)
- 行锁
全局锁
使用场景:全库逻辑备份(不加锁,会导致逻辑不一致)
Mysql提供的命令:Flush Table With Read Lock(FTWRL)
机制:允许读操作,停止(阻塞)所有增删改、DDL(表结构改动)操作
弊端(全库只读导致的问题):
- 在主库备份,系统无法进行业务操作(严重)
- 在从库备份,主从延迟(备份期间不能执行主库传过来的binlog)
全库逻辑备份的其他方案
方案一(最优)
Mysql自带的Mysqldump.exe工具,使用参数–single-transaction 的时候,导数据之前就会启动一个事务,在开始时会创建一个全库的视图(一致性视图),之后根据此视图进行逻辑备份。
优点:用到了视图,不会阻塞增删改操作
缺点:事务的实现依赖视图,所以这个方案只能在支持事务的引擎上使用(使用InnoDB替代MyISAM的原因之一)
方案二(最差)
全库只读命令,同FTWRT一样可以达到全库只读的效果
set global readonly=true
对比:
- 修改 global 变量的方式影响面更大。readonly 的值会被用来做其他逻辑,比如用来判断一个库是主库还是备库。
- 客户端异常关闭时,FTWRT方式会自动释放锁;而readonly方式会一直保持该状态,风险更高
表级锁
表锁
语法:lock table table_name read/write, table_name read/write
机制:
- 读锁(lock table table_name read,共享锁)
当前线程:可读,阻塞写
其他线程:可读,阻塞写 - 写锁(lock table table_name write,排他锁)
当前线程:可读写
其他线程:阻塞读写
元数据锁(meta data lock,MDL)
5.5版本引入,不需要显式使用,在访问一个表的时候会被自动加上。
DML(增删改查)读锁,DDL(表结构改动)写锁
行锁
InnoDB独有
参考:极客时间 Mysql45讲专栏 作者:林晓斌, 网名"丁奇",腾讯云数据库负责人
这篇关于Mysql基础(五)锁的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-01部署MySQL集群教程:新手入门指南
- 2024-11-01如何部署MySQL集群:新手入门教程
- 2024-11-01部署MySQL集群学习:新手入门教程
- 2024-11-01部署MySQL集群入门:新手必读指南
- 2024-10-23BinLog入门:新手必读的MySQL二进制日志指南
- 2024-10-23Binlog入门:MySQL数据库的日志管理指南
- 2024-10-22MySQL数据库入门教程:从安装到基本操作
- 2024-10-22MySQL读写分离入门教程:轻松实现数据库性能提升
- 2024-10-22MySQL分库分表入门教程
- 2024-10-22MySQL慢查询的诊断与优化指南