mysql的锁(全局锁)

文章目录

  • 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参数来完成不加锁的一致性数据备份

上一篇:片机+ISD1760智能家用语音唤醒系统设计


下一篇:代码随想录算法训练营第31天|● 理论基础 ● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和