全局锁

什么时候加全局锁
全局锁即加给整个库,主要是在库备份时加全局锁,mysql使用Flush tables with read lock (FTWRL)来加全局锁。

为什么要加全局锁
如果不加全局锁,库备份时有数据写入时,可能不会写入备份文件,导致备份结果出错。

全局锁的影响

  • 如果给主库备份,加全局锁后,整个库不能写入数据,整个业务就要停摆
  • 如果给从库加备份,加全局锁后,不能从binlog同步增量数据,查询就会出问题

怎么避免备份的数据一致性

  • 对于支持事务引擎的库,比如使用innodb时,可以通过先开启一个事务再导出数据,原理是满足事务隔离级别这个特性的前提下,事务引擎能开启一个表视图,利用mvcc机制,保证数据的一致性。