锁(三)

1.全局锁

全局读锁
作用:让整个库处于只读状态
命令:
1. Flush tables with read lock (FTWRL)
2. set global readonly=true
两个命令差异:

  1. 适用所有引擎、客户端异常可以自动释放锁。
  2. readonly 会有别的判断用途、客户端异常不会自动释放锁

全库备份::

  1. 支持事务的引擎:
    官方自带的逻辑备份工具是 mysqldump。当 mysqldump 使用参数–single-transaction 的时候,导数据之前就会启动一个事务,来确保拿到一致性视图。而由于 MVCC 的支持,这个过程中数据是可以正常更新的。
  2. 不支持事务的引擎:
    用FTWRL来锁定库

2.表锁

加锁:locok tables 表名称 read/write
释放:unlock tables … 或者客户端断开自动释放

3. 表元数据锁(MDL)

不用显式添加
增、删、改添加读锁,表变更时添加写锁

4. 行锁

行锁就是针对数据表中行记录的锁
在 InnoDB 事务中,行锁是在需要的时候才加上的,但并不是不需要了就立刻释放,而是要等到事务结束时才释放。这个就是两阶段锁协议
如果你的事务中需要锁多个行,要把最可能造成锁冲突、最可能影响并发度的锁尽量往后放

5. 死锁和死锁检测

当出现死锁以后,有两种策略:
一种策略是,直接进入等待,直到超时。这个超时时间可以通过参数 innodb_lock_wait_timeout 来设置。在 InnoDB 中,innodb_lock_wait_timeout 的默认值是 50s
另一种策略是,发起死锁检测,发现死锁后,主动回滚死锁链条中的某一个事务,让其他事务得以继续执行。将参数 innodb_deadlock_detect 设置为 on,表示开启这个逻辑。
进行并发控制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值