Mysql锁-全局锁
losetowin 发布于:2019-2-16 16:14 分类:技术 有 4874 人浏览,获得评论 0 条 标签: mysql 锁
本文地址:http://www.dutycode.com/mysql_suo_quanjusuo.html
除非注明,文章均为 www.dutycode.com 原创,欢迎转载!转载请注明本文地址,谢谢。
除非注明,文章均为 www.dutycode.com 原创,欢迎转载!转载请注明本文地址,谢谢。
mysql锁
Mysql包含 全局锁, 表级锁, 行级锁三种
全局锁
介绍
全局锁就是对整个数据库实例加锁。
使用 命令 Flush tables with read lock (FTWRL)
来对数据库实例加全局锁。
加全局锁之后会怎样?
-
使用FTWRL命令后,下列操作将被堵塞:
- 数据更新语句(数据的增删改)
- 数据定义语句(包括建表、修改表结构等)
- 更新类事务的提交语句。
- 整个库处于 只读 状态
使用场景:
做全库逻辑备份。
-
风险
- 作用在主库时:备份期间只读,导致业务停摆,无法执行更新
- 作用在从库时:备份期间从库只读,无法执行主库同步过来的binlog,导致主从延时
应该如何做备份?
-
Innodb引擎下
因为Innodb引擎支持一致性读,即支持可重复读(含)以上事务隔离级别,所以在事务开启的情况下,可以拿到一致性视图。之后进行备份。
官方提供了mysqldump工具
增加参数single-transaction,会再导数据前启动一个事务,拿到一致性视图,之后便可以进行备份。补充:
- single-transaction只支持全部表支持事务引擎的库,否则只能使用FTWRL备份
- MVCC支持,所以在导数据期间数据可更新
-
MyISAM引擎下
- 不支持事务,即不支持一致性读,所以无法通过开启事务拿到一致性视图来进行导数据备份
- 可通过使用FTWRL备份
-
使用 set global readonly = true 设置库进行只读状态,之后备份
可让库进入到只读状态,但不建议使用1、readonly 可能有业务含义:比如用来判断是主库还是从库,修改全局可读状态影响范围可能比较大 2、和FTWRL异常处理机制不同 FTWRL命令在客户端和服务端异常断开时,会自动释放锁,使库恢复到正常状态 readonly 如果客户端异常断开时,数据库会一直保持只读状态,会导致整个库长时间不可写
备注:readonly对super权限无效
版权所有:《攀爬蜗牛》 => 《Mysql锁-全局锁》
本文地址:https://www.dutycode.com/mysql_suo_quanjusuo.html
除非注明,文章均为 《攀爬蜗牛》 原创,欢迎转载!转载请注明本文地址,谢谢。