一、介绍
- 全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的DML、DDL语句、已经更新操作的事务提交语句都将被阻塞
- 其典型的使用场景是做全库的逻辑备份,对所有的表进行锁定,从而获得一致性视图,保证数据的完整性
- 不加全局锁
- 加上全局锁
二、演示
- 数据库一旦加上全局锁,在全局锁没有被释放之前,其他客户端是不能去更新当前数据库中的数据,只能读取,不能写入
三、特点
- 数据库中加上全局锁,是一个比较重的操作,锁的粒度很大,一旦加上全局锁,其他客户端写入操作都会被阻塞,存在以下问题
① 如果在主库上备份,那么在备份期间都不能执行更新操作,业务基本上就得停摆
② 如果在从库上备份,那么在备份期间从库不能执行主库同步过来的二进制日志(binlog),会导致主从延迟 - 在InnoDB存储引擎中,可以再备份数据库时加上参数:–single-transaction 来完成不加锁的一致性数据备份(底层是通过快照读实现的)