• MySQL实战06の锁


    1. 锁的用处?

    MySQL的锁就是为了处理并发问题

    2. 锁的分类

    全局锁:对整个数据库实例加锁。
    加全局锁命令:Flush tables with read lock;(FTWRL) 
    加全局锁后,数据更新语句,数据定义语句和更新类事务语句都会被阻塞。
    适用场景:做全库逻辑备份,就是把每个表selsct出来存成文本。

    备份为什么加全局锁?不加锁会有什么问题?
    假设维护极客时间的购买系统,关注用户的账户余额和用户课表。
    备份系统备份得到的库不是一个逻辑时间点,这个视图是逻辑不一致的(
    拿到一致性视图,我们需要事务
    MySQL自带的备份工具是mysqldump,使用参数-single-transaction,导库会启动一个事务来确保拿到一致性视图。
    这个方法只适用于所有的表使用事务引擎的库,MyISAM不支持事务,是需要
    FTWRL命令加锁
    既然全库只读,使用set global readonly=true的方式呢?
    (1)有些系统用readonly用作其它逻辑,比如判断是主从库
    (2)异常处理上的差异。
    使用FTWRL命令,客户端异常MySQL会自动释放这个全局锁整个库可恢复正常更新状态;
    若使用readonly,客户端异常数据库会一直保持readonly状态,整个库长时间不可写,风险较高。
    表级锁
    表锁
    lock tables ...read/write
    InnoDB支持更细粒度的行锁,一般不使用表锁命令。
    
    元数据锁
    不需要显示使用,在访问一个表的时候会被自动加上,保证读写的正确性。
    (1)读锁之间不互斥,多个线程可同时对一张表的数据进行增删改查。
    (2)读写锁之间,写锁之间是互斥的,保证变更表结构操作的安全性。
    
    如何安全的给小表加字段?
    在alter table 语句里面设定等待时间,在等待时间内拿到MDL写锁最好,拿不到也不影响后续业务语句,先放弃,可以再重试命令获取。

    总结

    理解锁的概念,分类和用途

    原文地址:https://time.geekbang.org/column/article/69862

  • 相关阅读:
    swift 学习笔记
    collection view 开发笔记
    代码片段
    childViewController 小计
    iOS 二维码扫描
    statusbarhidden stuff 状态栏的各种特性
    AFNetworking 3.0 断点续传 使用记录
    scrollview 图片放大 捏合 瓦片地图 相关注意事项
    iOS 9 强制横屏
    简单的JS运动封装实例---侧栏分享到
  • 原文地址:https://www.cnblogs.com/yangjiming/p/10172665.html
Copyright © 2020-2023  润新知