锁分类
全局锁
针对整个数据库实例加锁,加锁后数据库状态为只读。数据增删改,修改表,创建表等变更都会被阻塞。
命令:Flush tables with read lock (FTWRL)
使用场景:做全库逻辑备份
缺陷:在备份期间业务停止。
其他方式:官方自带的逻辑备份工具是 mysqldump。当 mysqldump 使用参数–single-transaction 的时候,导数据之前就会启动一个事务,来确保拿到一致性视图。而由于 MVCC 的支持,这个过程中数据是可以正常更新的。(隐含条件:支持事务的引擎,可重复读的隔离级别)
不使用 set global readonly=true的缺点:
一:有些系统 readonly 的值会被用来做其他逻辑,比如用来判断一个库是主库还是备库。
二是:客户端发生异常断开情况下,FTWRL 会自动释放,readonly会一直保持当前状态。
表级锁
表锁
作用:针对某张表的读写锁定。
命令:lock tables … read/write。 主动释放或者链接断开释放。
限制:当前链接线程只能严格根据上锁的语句操作,如read A,write B,就只能 读A,写B。其他操作都不允许。写包含(读写ÿ