文章目录
- mysql按照锁的粒度分类
- 全局锁
- 概念:
- 全局锁使用场景:
- 全局锁备份案例:
mysql按照锁的粒度分类
全局锁
概念:
全局锁就是对整个数据库实例加锁
。MySQL 提供了一个加全局读锁的方法,命令是:
Flush tables with read lock (FTWRL)。
当你需要让整个库处于只读状态的时候
,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句。
,通俗的来说只能读取,不能写入,
解锁命令:
unlock tables
全局锁使用场景:
全局锁的典型使用场景是,做全库逻辑备份(mysqldump),对所有表进行锁定,从而获取一致性视图,保证数据的完整性,一致性
全局锁备份案例:
第一步:
使用命令
Flush tables with read lock
进行全局锁表;全局锁表成功
:当所有所有表被锁后,只能读,无法写
:
多个session测试:
第二步:
当全局锁时,进行逻辑备份数据:
数据备份成功,
第三步:解锁
解锁命令:
unlock tables
解锁成功后,数据库就可以恢复正常的读写状态
特点:
数据库中加全局锁,是一个比较重的操作,存在以下问题:
1、如果在主库上备份,备份期间都不能执行更新。业务基本停止了
2、如果从库上备份,备份期间从库不能执行主库同步过来的二进制日志会导致主从延迟
在innodb存储引擎重,可以在备份的时候加上参数--single-transaction参数来完成不加锁的一致性数据备份