MySQL报错Lock wait timeout exceeded怎么办

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL报错Lock wait timeout exceeded怎么办相关的知识,希望对你有一定的参考价值。

临时解决办法:

执行mysql命令:show full processlist;

然后找出插入语句的系统id

执行mysql命令:kill id

在网络上找了想相关资料,这里摘录如下:

首先,查看数据库的进程信息:

show full processlist;

/*结果略,主要看id列的值*/

再查看事物表:

SELECT * FROM information_schema.INNODB_TRX\G;
/*结果略,注意结果中的trx_mysql_thread_id部分的值*/

查找对应的id,然后kill id的值即可;

mysql默认是自动提交的,可以用以下命令查看:

select @@autocommit;
值为1就是自动提交,如果你的不是1,但你又想要自动提交,那么设置的命令是:

set global autocommit=1;

表数据量也不大,按照普通的情况来说,简单的update应该不会造成阻塞的,mysql都是autocommit,不会出现update卡住的情况,去查看下autocommit的值。
mysql> select @@autocommit;
+--------------+
| @@autocommit |
+--------------+
| 0 |
+--------------+
1 row in set (0.00 sec)

mysql>

看到亮闪闪的0,这个设置导致原来的update语句如果没有commit的话,你再重新执行update语句,就会等待锁定,当等待时间过长的时候,就会报ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction的错误。
所以赶紧commit刚才执行的update语句,之后 set global autocommit=1;

2、最终解决方案:

出现该问题大多数是因为出现死锁或者connection/session没有关闭造成的,去检查执行该sql的语句,检查是否有finally中关闭连接。
参考技术A 用下面步骤尝试一下,看看能不能解决:
1、登录到mysql后,输入命令:show processlist;
查看当前会话列表,左边红框是会话执行的命令,右边红框是会话的时间。通常会话时间太长的多半是因为锁等待活死锁造成的,但也不排除一些慢查询。
我们删除那些时间过长的会话。

2、输入命令:kill ×××(×××为等待时间最长的会话);
删除会话列表中等待时间最长的会话

3、依次删除其他等待时间过长的会话本回答被提问者采纳

执行 update操作的时候有报错 ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

mysql> show full processlist;
#查看问题的线程!!!!

找到异常进程的ID

然后kill 掉:

mysql> kill xxxxxxx; #xxxxxx是ID号

然后再次执行update执作,问题解决!!

以上是关于MySQL报错Lock wait timeout exceeded怎么办的主要内容,如果未能解决你的问题,请参考以下文章

Lock wait timeout exceeded; try restarting transaction-Mysql报错

MySQL报错Lock wait timeout exceeded怎么办

在mysql数据库中为啥经常报错:lock wait timeout exceeded,是啥原因引起的?该如何解决?

执行 update操作的时候有报错 ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

9. Lock wait timeout exceeded

记一次 MySQL出现“Lock wait timeout”错误的原因