Mysql锁-全局锁

losetowin 发布于:2019-2-16 16:14 分类:技术  有 696 人浏览,获得评论 0 条 标签: mysql  

本文地址:http://www.dutycode.com/mysql_suo_quanjusuo.html
除非注明,文章均为 www.dutycode.com 原创,欢迎转载!转载请注明本文地址,谢谢。

mysql锁

Mysql包含 全局锁, 表级锁, 行级锁三种

全局锁

介绍

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

使用 命令 Flush tables with read lock (FTWRL)来对数据库实例加全局锁。

加全局锁之后会怎样?
  • 使用FTWRL命令后,下列操作将被堵塞:
    • 数据更新语句(数据的增删改)
    • 数据定义语句(包括建表、修改表结构等)
    • 更新类事务的提交语句。
  • 整个库处于 只读 状态
使用场景:

做全库逻辑备份。

  • 风险
    • 作用在主库时:备份期间只读,导致业务停摆,无法执行更新
    • 作用在从库时:备份期间从库只读,无法执行主库同步过来的binlog,导致主从延时
应该如何做备份?
  1. Innodb引擎下

    因为Innodb引擎支持一致性读,即支持可重复读(含)以上事务隔离级别,所以在事务开启的情况下,可以拿到一致性视图。之后进行备份。

    官方提供了mysqldump工具
    增加参数single-transaction,会再导数据前启动一个事务,拿到一致性视图,之后便可以进行备份。

    补充:
    • single-transaction只支持全部表支持事务引擎的库,否则只能使用FTWRL备份
    • MVCC支持,所以在导数据期间数据可更新
  2. MyISAM引擎下

    • 不支持事务,即不支持一致性读,所以无法通过开启事务拿到一致性视图来进行导数据备份
    • 可通过使用FTWRL备份
  3. 使用 set global readonly = true 设置库进行只读状态,之后备份
    可让库进入到只读状态,但不建议使用

    1、readonly 可能有业务含义:比如用来判断是主库还是从库,修改全局可读状态影响范围可能比较大
    2、和FTWRL异常处理机制不同
    FTWRL命令在客户端和服务端异常断开时,会自动释放锁,使库恢复到正常状态
    readonly 如果客户端异常断开时,数据库会一直保持只读状态,会导致整个库长时间不可写 

备注:readonly对super权限无效


版权所有:《攀爬蜗牛》 => 《Mysql锁-全局锁
本文地址:https://www.dutycode.com/mysql_suo_quanjusuo.html
除非注明,文章均为 《攀爬蜗牛》 原创,欢迎转载!转载请注明本文地址,谢谢。

上一篇:Mysql锁-行锁
下一篇:AWK使用多个分隔符