MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类。数据库锁设计的初衷是处理并发问题。
全局锁
命令:Flush tables with read lock (FTWRL),使整个库处于只读状态,可以在客户端断开的时候自动释放。
使用场景:全库逻辑备份。
官方自带的备份工具 mysqldump,使用参数–single-transaction 时,导数据之前会启动一个事务,来确保拿到一致性视图,但只适用于所有的表都使用事务引擎的库,对于 MyISAM 这种不支持事务的引擎,如果备份过程中有更新,总是只能取到最新的数据,就破坏了备份的一致性,此时就需要使用 FTWRL 命令。对于全部是 InnoDB 引擎的库,建议选择使用–single-transaction 参数。
表级锁
表级别分为两种:表锁、元数据锁(meta data lock,MDL)。
表锁