美文网首页
mysql全局锁和表锁

mysql全局锁和表锁

作者: 塞漠胡杨 | 来源:发表于2019-06-04 18:42 被阅读0次

MySQL中的锁可以分为三类:全局锁,表级锁和行锁

全局锁

全局锁是对整个数据库加锁,可以让整个数据库处于只读状态,其后的数据更新、数据定义、事务更新等语句会被阻塞。

加锁方法Flush tables with read lock, 简写为FTWRL。

使用场景:全库逻辑备份。 即将整库的每个表都select出来存储为文本。

全局锁潜在的危险:

  • 在主库上备份,备份期间不能更新,业务停滞
  • 在从库上备份,备份期间不能执行主库同步过来的binlog,导致主从延迟。

如果不加全局锁可能会出现的问题:
备份系统备份得到的库不是一个逻辑时间点,视图逻辑不一致。
在可重复读隔离级别下开启一个事务可以拿到一致性视图。官方自带的逻辑备份工具是mysqldump,在使用时加上--single-transaction参数会启动事务。

有些存储引擎不支持事务引擎,因此需要用到FTWRL命令。

表级锁

表级锁有两种:表锁、 元数据锁(meta data lock, MDL)。

加锁方法:lock tables ... read/write

释放锁的方法:unlock tables主动释放,客户端断开自动释放。 表锁的读锁和写锁,以及写锁与写锁互斥。

MDL锁的作用是防止DDL和DML并发的冲突,也即一个语句为数据的增删改查,一个语句为修改表的结构,字段等。
MDL不需要显示使用,在访问一个表的时候回自动加上。执行增删改查语句是会加MDL读锁,执行表结构变更语句是会加MDL写锁。

长事务情况下事务不提交,可能会一直占用MDL锁,导致后续的语句被阻塞。解决方法是在alter table语句里面设置等待时间,如果在等待时间里面拿不到MDL锁不要阻塞后面的业务语句。

alter table tbl_name NOWAIT add column ...
alter table tbl_name WAIT N add column...

相关文章

  • Mysql的锁

    MySql锁的分类 Mysql里的锁大致可以分为全局锁、表级锁和行锁三类。 全局锁 Mysql 增加全局锁的方法:...

  • 又一个mysql面试必问的东西mysql锁

    mysql锁 MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。 全局锁 全局锁就是对整个数据库实例加锁。M...

  • MYSQL(03)-锁

    MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类 全局锁 全局锁就是对整个数据库实例加锁,mysql提供了...

  • 06 | 全局锁和表锁 :给表加个字段怎么有这么多阻碍?

    根据加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类。今天这篇文章,我会和你分享全局锁和表级锁...

  • MySQL 锁

    根据加锁的范围,MySQL里面的锁大致可以分亨全局锁、表锁和行锁。 全局锁 全局锁就是对整个数据库实例加锁。MyS...

  • 5、全局锁和表锁

    根据加锁范围:MySQL里面的锁可以分为:全局锁、表级锁、行级锁 全局锁: 对整个数据库实例加锁。 MySQL提供...

  • Mysql的全局锁和表锁

    以前对Mysql的锁的认识,只了解表锁和行锁,其实Mysql的锁的种类还是不少的,有全局锁,表级锁,行级锁,还有元...

  • mysql学习day3

    mysql的锁根据加锁范围:MySQL里面的锁可以分为:全局锁、表级锁、行级一、全局锁:对整个数据库实例加锁。My...

  • mysql全局锁和表锁

    MySQL中的锁可以分为三类:全局锁,表级锁和行锁。 全局锁 全局锁是对整个数据库加锁,可以让整个数据库处于只读状...

  • MySQL锁

    MySQL锁分类 全局锁 表级锁 行锁 间隙锁 next-key lock 全局锁 作用范围:对整个数据库实例加锁...

网友评论

      本文标题:mysql全局锁和表锁

      本文链接:https://www.haomeiwen.com/subject/asmrxctx.html