MySQL全局锁和表锁

MySQL全局锁和表锁

全局锁

  对整个数据库加锁,语句为:Flush tables with read lock (FTWRL),加锁之后不可以进行增删改,也不能做DDL,是一个整库只读的状态,一般只有在做全库逻辑备份时才需要全局锁。可以看到,如果采用这种方式对库加锁的话,虽然保证了一致性,但十分影响业务。所以,应该尽量少采用这种方法,在数据的隔离级别中,可重复读也保证了在一个事务中所看到的数据是一致的,MySQL官方提供的mysqldump工具中就提供了–single-transaction参数实现一致性读,但是注意,这是需要存储引擎支持的~,对于MyISAM引擎还是只能采用上面的全局锁,全局锁的核心思想上是让数据库只读,也可以通过set global readonly=true命令来实现(但是这个命令影响范围更大,且客户端异常时并不会自动释放只读状态)。

表锁

  一共分为两种:表锁和元数据锁(MDL)
  表锁:lock tables +表名 read/write
  元数据锁:无需显式使用,自动加上,分为MDL读锁、MDL写锁,读锁之间可以共享,读锁与写锁互斥,写锁之间也互斥。事务中的MDL锁,在语句执行开始时申请,但是语句结束后并不会马上释放,而会等到整个事务提交后再释放
在对表结构进行修改时,要十分小心,要先查看是否有长事务,先kill掉,否则有可能阻塞住表上的查询。为了避免这一问题,可以在alter t上增加时间限制ALTER TABLE tbl_name NOWAIT add column ...ALTER TABLE tbl_name WAIT N add column ...

参考文献

MySQL实战45讲

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值