
全局锁和表锁 :给表加个字段怎么有这么多阻碍?
发布日期:2021-05-07 21:24:28
浏览次数:9
分类:精选文章
本文共 1308 字,大约阅读时间需要 4 分钟。
MySQL 锁机制是数据库管理中的重要组成部分,用于确保数据操作的并发控制和一致性。MySQL 中的锁可以分为全局锁、表级锁等多种类型。本文将重点探讨全局锁和表级锁的特点、使用场景以及相关风险。
全局锁
全局锁是对整个数据库实例加锁的一种机制,主要用于在数据库层面上进行控制。MySQL 提供了Flush tables with read lock(FTWRL)
命令,可以让整个数据库进入只读状态。使用该命令后,所有数据更新操作(如INSERT、UPDATE、DELETE
)和数据定义操作(如ALTER TABLE
)都会被阻塞,确保在备份期间不会有数据丢失或逻辑错误。
使用场景
- 全库逻辑备份:这是全局锁的主要用途。在进行全库逻辑备份时,确保所有数据的一致性和完整性。例如,使用
mysqldump
工具进行备份时,可以通过指定--single-transaction
参数,确保在备份过程中所有数据变化都在同一个事务中完成。
风险
- 主库备份期间不能更新:在主库进行全局锁备份时,必须确保在备份期间没有任何数据更新操作,否则会导致业务中断。
- 从库备份影响主从同步:在从库进行全局锁备份时,可能会导致主库的二进制日志同步受阻,进而导致主从延迟。
此外,全局锁还可以通过设置set global readonly=true
的方式实现全库只读。但这种方法存在以下风险:
- 潜在逻辑依赖:某些系统可能会将
readonly
状态用于其他逻辑判断(如判断主备状态),这会导致管理机制的不一致性。 - 异常处理问题:如果客户端在执行FTWRL命令后发生异常断开,MySQL会自动释放全局锁,而
set global readonly=true
则不会有这种机制,可能导致数据库长时间处于不可写状态。 - 权限问题:在从库上,如果有用户拥有超级权限,
readonly
状态会被忽略,可能导致数据写入操作。
表级锁
表级锁是对数据库表进行加锁的一种机制,MySQL 中的表级锁有两种:表锁和元数据锁(MDL)。
表锁
表锁的语法是lock tables ... read/write
,用于对特定表或多个表进行加锁。需要注意的是,表锁不仅会限制其他线程的读写,还会限制当前线程的操作对象。
- InnoDB的行锁支持:由于InnoDB引擎支持行锁,通常不会使用表锁来控制并发,因为表锁的锁范围过大,可能对业务逻辑造成较大影响。
元数据锁(MDL)
元数据锁是对表结构和其他元数据进行加锁的一种机制,其特点是自动加上,不需要显式使用。MDL的作用是确保读写操作的正确性。
- 读写锁机制:在对表进行增删改查操作时,会加MDL读锁;在对表进行结构变更操作时,会加MDL写锁。读锁之间不互斥,但写锁之间是互斥的,确保了结构变更操作的安全性。
- 事务提交机制:MDL锁会在事务提交后自动释放。在进行表结构变更时,必须确保没有长时间锁定,否则会对线上查询和更新造成影响。
总结
全局锁和表级锁在MySQL 中各有优劣,适用于不同的场景。全局锁适合全库逻辑备份,但风险较高;表级锁则在具体业务场景中提供更细粒度的锁控制。理解和合理选择锁机制,是优化数据库性能和保证数据一致性的关键。
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年03月29日 01时16分16秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
16 最接近的三数之和(排序、双指针)
2019-03-04
python中的all函数
2019-03-04
1137 第 N 个泰波那契数(迭代、记忆性递归)
2019-03-04
279 完全平方数(bfs)
2019-03-04
865 具有所有最深结点的最小子树(递归)
2019-03-04
738 单调递增的数字(找出逆序的位置)
2019-03-04
410 分割数组的最大值(二分查找、动态规划)
2019-03-04
875 爱吃香蕉的珂珂(二分查找)
2019-03-04
450 删除二叉搜索树中的节点(递归删除节点)
2019-03-04
769 最多能完成排序的块(分析)
2019-03-04
542 01 矩阵(单源bfs、多源bfs)
2019-03-04
python测试代码耗时
2019-03-04
桌面图标的自动排列图标
2019-03-04
第十一届蓝桥杯python组第二场省赛-数字三角形
2019-03-04
蓝桥杯四平方和(暴力)
2019-03-04
手机号码(数位dp-dfs)
2019-03-04
算法训练 Anagrams问题
2019-03-04
Linux-文件目录类常用指令3
2019-03-04
搜索查找类指令
2019-03-04
数字三角形的无返回值的深度优先搜索解法
2019-03-04