数据库
首页 > 数据库> > Mysql基础(五)锁

Mysql基础(五)锁

作者:互联网

全局锁

使用场景:全库逻辑备份(不加锁,会导致逻辑不一致)

Mysql提供的命令:Flush Table With Read Lock(FTWRL)

机制:允许读操作,停止(阻塞)所有增删改、DDL(表结构改动)操作

弊端(全库只读导致的问题):

  1. 在主库备份,系统无法进行业务操作(严重)
  2. 在从库备份,主从延迟(备份期间不能执行主库传过来的binlog)

全库逻辑备份的其他方案

方案一(最优)

Mysql自带的Mysqldump.exe工具,使用参数–single-transaction 的时候,导数据之前就会启动一个事务,在开始时会创建一个全库的视图(一致性视图),之后根据此视图进行逻辑备份。

优点:用到了视图,不会阻塞增删改操作
缺点:事务的实现依赖视图,所以这个方案只能在支持事务的引擎上使用(使用InnoDB替代MyISAM的原因之一)

方案二(最差)

全库只读命令,同FTWRT一样可以达到全库只读的效果
set global readonly=true

对比:

  1. 修改 global 变量的方式影响面更大。readonly 的值会被用来做其他逻辑,比如用来判断一个库是主库还是备库。
  2. 客户端异常关闭时,FTWRT方式会自动释放锁;而readonly方式会一直保持该状态,风险更高

表级锁

表锁

语法:lock table table_name read/write, table_name read/write

机制:

元数据锁(meta data lock,MDL)

5.5版本引入,不需要显式使用,在访问一个表的时候会被自动加上。
DML(增删改查)读锁,DDL(表结构改动)写锁

行锁

InnoDB独有

参考:极客时间 Mysql45讲专栏 作者:林晓斌, 网名"丁奇",腾讯云数据库负责人

标签:lock,name,全库,备份,基础,视图,Mysql,table
来源: https://blog.csdn.net/qq_43610304/article/details/121503838