一起养成写作习惯!这是我参与「掘金日新计划 · 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 讲》
《数据库与其备份恢复主要注意事项》