06.全局锁和表锁

本文介绍了MySQL中的锁机制,主要讨论了全局锁和表级锁的使用。全局锁通过FTWRL命令使数据库进入只读状态,适用于全库逻辑备份。mysqldump工具配合--single-transaction参数可在不锁定全库的情况下备份。表级锁则分为表锁和元数据锁(MDL),MDL在访问表时自动添加,用于保证读写正确性。表锁通过lock tables命令控制,读写锁之间存在互斥。
摘要由CSDN通过智能技术生成

全局锁和表锁

  • 1.锁的初衷处理并发问题、多用户共享资源,出现并发访问、数据库需要控制资源的访问规则,锁用来实现访问规则的重要数据结构。

  • 2.根据加锁的范围,mysql分为全局锁、表


1.全局锁

  • 1.全局锁对整个数据库实例加锁。命令:Flush tables with read lock (FTWRL)让整个库处于只读状态
    但之后的其他线程的会阻塞:
    更新语句(增删改)、数据定义语句(建表、改表)、更新类事务的提交语句

  • 2.全局锁的使用场景:全库逻辑备份,库的表都存储为文本,备份过程库完全处于只读状态

  • 3.官方自带逻辑工具:mysqldump,当工具使用参数==–single-transaction==,导入数据会启动事务,确保拿到一致性视图,过程可以更新

  • 4.single-transaction方法只适用于所有的表使用事务引擎的库

  • 5.有些系统,set global readonly=true的值用来做其他逻辑,修改global变量方式影响大
    异常处理上执行FTWRL后客户端发生异常断开自动释放全局锁; readonly后,客户端一直保持readonly状态,长时间处于不可写,风险高


2.表级锁

  • 1.mysql表级锁分两种:表锁元数据锁

  • 2.表锁语法:lock tables …read/write.
    可以用unlock tables主动释放锁也可以客户端断开自动释放,,此语法会限制其他进程读写也会限定本线程后的操作对象

  • 3.元数据锁(meta data lock,MDL):MDL不需要显式使用,访问表的时候自动加上,作用是保证读写正确性,MySQL 5.5版本中引入了MDL

  • 4.对表增删改查操作加MDL读锁,对表进行结构变更,MDL写锁

  • 5.读锁之间不互斥,多个线程可对一张表增删改查
    读写锁之间、写锁之间互斥。两个线程对一个表操作要等另一个执行完毕

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值