本文为本人学习极客时间《MySQL实战45讲》的学习笔记。
原文链接:https://time.geekbang.org/column/article/69862
https://time.geekbang.org/column/article/70215
本文目录:
本文用来聊聊 MySQL 的锁。数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。
根据加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类。锁的设计比较复杂,本文介绍的主要是碰到锁时的现象和其背后的原理。
1、全局锁
顾名思义,全局锁就是对整个数据库实例加锁。MySQL 提供了一个加全局锁的方法,命令是 Flush tables with read lock(FTWRL)。当你需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞: 数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句。
全局锁的典型使用场景是:做全库逻辑备份。也就是把整库每个表都 select 出来存成文本。