mysql表被锁了怎么办? error:1205 – Lock wait timeout exceeded; try restarting transaction

  • Post author:
  • Post category:mysql


error:1205 – Lock wait timeout exceeded; try restarting transaction

起因: 执行一个简单的insert语句失效,具体错误如下:1205 – Lock wait timeout exceeded; try restarting transaction。

这个错误是由于mysql事务没有提交导致锁等待。

解决方案:

1、在Navicat中执行mysql命令:show full processlist;

2、然后找到查询语句的id,kill掉被锁住的线程id

3、查看事务表:select * from information_schema.innodb_trx;

show full processlist;

一、介绍一下每个属性

id 很容易就猜到是这个连接的id,值对应这个连接使用的线程id。

User用户名

Host 连接的地址和端口,那么你可能会问,为什么我贴的例子的地址都是同一个host呢,很明显是用了代理,感兴趣的可以看看这篇文章http://www.phpv.net/html/1583.html,这里就不详细解释了。

db 此连接所连接使用的数据库名。

command 一般有俩值:sleep和query,从字面意思就可以看出,一个是处理睡眠状态,就是处于连接状态,但是没有正在执行任何sql语句,Query代表正在执行sql语句。

Time 连接的时间。

State 我个人觉得应该是当前线程的状态吧。

info 代表正在执行的sql,如果command为sleep时,它为空。

那如果我们遇到一个sql要执行很长时间,但是我们又不想让它继续执行了,怎么办呢?既然每个连接是在一个线程里维护,这个线程是否可以删除呢?我们尝试杀掉15814这个线程

kill 15814;