mysql修改字段引发的事故

文章介绍了MySQL中的元数据锁(MDL)如何在表结构变更时造成阻塞,并通过一个实例展示了在Navicat中,由于长事务未提交导致的MDL锁问题,影响了其他会话的DDL操作和数据查询。解决方法包括检查并结束长事务,或者在执行DDL前暂停。
摘要由CSDN通过智能技术生成

mysql修改字段引发的事故

MDL锁介绍

MySQL中表级别的锁有两种:一种是表锁,一种是元数据锁(MDL)。
MDL不需要显式使用,在访问一个表的时候会被自动加上。其中有MDL读锁(对表中数据做增删改查操作),MDL写锁(对表做结构变更操作).

还原事故

在Navicat中,
会话1:
begin;
SELECT * FROM test;
在这里插入图片描述

会话2:
SELECT * FROM test;
在这里插入图片描述

会话3:
alter table test add t1 varchar(20);在事务没有commit之前,之后的所有操作全部阻塞,影响到线上业务。
在这里插入图片描述

会话4:
SELECT * FROM test; 阻塞
在这里插入图片描述

解决

当将会话1 当中的事务提交之后,会话3就会获取MDL写锁,从而正常执行。
本质上还是 长事务问题 ,事务不提交,就会一直占着MDL锁。所有在执行前可以在MySQL的information_schema 库的 innodb_trx 表中进行查询,有没有当前正在执行的事务。如果有的话,那就先考虑先暂停DDL,或者kill掉这个长事务。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值