mysql 锁表确认及解除锁表

目录

一、查看表是否被锁

1、查询库表命令

2、连接工具直接查询

3、show processlist 命令

二、解锁表


一、查看表是否被锁

一共3种方式

1、查询库表命令

1)information_schema库里的processlist表,存着正在进行的线程数据。

可通过where条件模糊匹配执行sql中的表名来拿到该表的相关线程数据。

通过查看state字段确认表是否被锁,可翻译或百度查看详细锁表原因。

select id,db,user,host,command,time,state,info
from information_schema.processlist
#where info like '%表名%'
order by time desc;

字段注释
id线程id标识,当锁表或进程卡死时可用kill杀掉
user当前连接用户
host显示当前线程命令发出的的客户端Ip和端口号,用来追踪
db当前连接的数据库名
command连接状态,一般是休眠(sleep),查询(query),连接(connect)的命令的类型
time连接执行时间,单位是秒
state显示当前线程中sql语句的执行状态
info执行的sql语句

确认被锁后,用命令kill杀掉该线程来释放。

kill id;

2)未提交事物,阻塞DDL,继而阻塞所有同表的后续操作,查看未提交事务的进程

select * from information_schema.innodb_trx

3)通过show processlist看不到TableA上有任何操作,在information_schema.innodb_trx中也没有任何进行中的事务。

可能是在一个显式的事务中,对表进行了一个失败的操作,如查询一个不存在的字段,这时事务没有开始,但失败语句获取到的锁还有效,没有释放。

select * from performance_schema.events_statements_current

2、连接工具直接查询

我这用navicat演示

通过查看state字段确认表是否被锁。

确认被锁后,用命令kill杀掉该线程来释放。

3、show processlist 命令

使用show processlist;查询命令来查看当前所有线程

show processlist;

也可添加full查看更详细的内容

show full processlist;

区别:
如果不用full,则在Info字段中只显示每个语句的前100个字符

这个命令要一条条数据查找,建议使用前两种才方法

查看info字段中的表名。

通过查看state字段确认表是否被锁。

确认被锁后,用命令kill杀掉该线程来释放。

二、解锁表

确认被锁后,用命令kill杀掉相关线程来释放。

kill 线程id;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值