MySQL 全局锁

229 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情

根据加锁的范围,MySQL 里面的锁大致可以分为:全局锁、表级锁、行锁三类。今天学习一下全局锁。

什么是全局锁

全局锁就是对整个数据库实例加锁。

如何操作全局锁

加全局读锁:

 flush tables with read lock;

Closes all open tables and locks all tables for all databases with a global read lock.

解锁:

 unlock tables;

加了全局锁后,什么现象

整个数据库实例处于只读状态。

其它线程的数据更新语句(数据的增删改)、数据定义语句(建表、修改标结构)均会阻塞。

当前线程的数据更新语句(数据的增删改)、数据定义语句(建表、修改标结构)均直接报错(have a conflicting read lock)。

全局锁的使用场景

数据库全库逻辑备份(针对数据库中有使用 MyISAM 等不支持事务引擎的表)

拓展

物理备份:对数据库系统的物理文件(如数据文件,日志文件等)的备份,也可说是文件系统级别的备份,其中包含的方法: 冷备份(脱机备份):是在关闭数据库的时候进行的; 热备份(联机备份):数据库处于运行状态,依赖于数据库的日志文件; 温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作。

逻辑备份:就是对数据库逻辑组件(如:表等数据库对象)的备份,备份文件是 SQL 文件或特定格式的导出文件。

实际操作中大部分以物理备份为主,逻辑备份为辅。逻辑备份和物理备份各有优劣,一般来说,物理备份恢复速度比较快,但占用空间比较大,逻辑备份速度比较慢,占用空间比较小,但逻辑备份的恢复成本相对高一些;

总结

如果表使用了不支持事务的引擎,那么你需要全局锁,否则用不到。

参考

MySQL 5.7 Reference Manual

《MySQL 实战 45 讲》

《数据库与其备份恢复主要注意事项》