图:上海外滩
mysql锁
Mysql包含 全局锁, 表级锁, 行级锁三种
全局锁
介绍
全局锁就是对整个数据库实例加锁。
使用 命令 来对数据库实例加全局锁。
加全局锁之后会怎样?
使用FTWRL命令后,下列操作将被堵塞:
数据更新语句(数据的增删改)
数据定义语句(包括建表、修改表结构等)
更新类事务的提交语句。
整个库处于只读状态
使用场景:
做全库逻辑备份。
风险
作用在主库时:备份期间只读,导致业务停摆,无法执行更新
作用在从库时:备份期间从库只读,无法执行主库同步过来的binlog,导致主从延时
应该如何做备份?
Innodb引擎下
因为Innodb引擎支持一致性读,即支持可重复读(含)以上事务隔离级别,所以在事务开启的情况下,可以拿到一致性视图。之后进行备份。
官方提供了mysqldump工具
增加参数single-transaction,会再导数据前启动一个事务,拿到一致性视图,之后便可以进行备份。
补充:
single-transaction只支持全部表支持事务引擎的库,否则只能使用FTWRL备份
MVCC支持,所以在导数据期间数据可更新
MyISAM引擎下
不支持事务,即不支持一致性读,所以无法通过开启事务拿到一致性视图来进行导数据备份
可通过使用FTWRL备份
使用 set global readonly = true 设置库进行只读状态,之后备份
可让库进入到只读状态,但不建议使用
备注:readonly对super权限无效
注:内容总结整理自极客时间课程《Mysql实战45讲》
BTW:回复 “Mysql锁”关键字,可获取本文脑图
领取专属 10元无门槛券
私享最新 技术干货