MySQL错误代码:1205。超过锁定等待超时;尝试在插入时重新启动事务

MySQL错误代码:1205。超过锁定等待超时;尝试在插入时重新启动事务,mysql,Mysql,我正在向我的一个表中插入一个数据,我一直得到一个锁 insert into inventory_files(id, pro_id) values(30,6569); 我得到以下错误 Error Code: 1205. Lock wait timeout exceeded; try restarting transaction 51.004 sec SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ; 然后插入数据 SE

我正在向我的一个表中插入一个数据,我一直得到一个锁

insert into inventory_files(id, pro_id) values(30,6569);
我得到以下错误

Error Code: 1205. Lock wait timeout exceeded; try restarting transaction    51.004 sec

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ; 
然后插入数据

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ ; 
我在插入其他表时没有问题。任何其他建议。
我也跑了

SHOW ENGINE INNODB STATUS;
没有锁着的桌子

'InnoDB','','

2017-08-04 13:57:34 0x7f0c44461700 INNODB监视器输出 从最后29秒计算的每秒平均值

背景线程

srv_主线程循环:93个srv_活动,0个srv_关闭,2985个srv_空闲

srv_主线程日志刷新和写入:3076

信号量

OS等待阵列信息:保留计数29

OS等待阵列信息:信号计数29

RW共享旋转0,旋转52,操作系统等待26

RW excl旋转0,旋转0,操作系统等待0

RW sx旋转0,旋转0,操作系统等待0

每次等待旋转轮数:52.00 RW共享,0.00 RW不包括,0.00 RW sx

交易

Trx id计数器2147575956\n 为trx的n:o<2147575378撤消n:o<0状态:正在运行但处于空闲状态而完成清除

历史记录列表长度91

每个会话的事务列表:

---事务4211659168792,未启动

0个锁结构,堆大小1136,0个行锁

---事务421165916587872,未启动

0个锁结构,堆大小1136,0个行锁

---事务处理2147575922,有效104秒

6个锁结构,堆大小1136,52个行锁,撤消日志条目5

MySQL线程id 32,操作系统线程句柄139690660574976,查询id 43020 localhost 127.0.0.1 my_web_用户

---事务处理2147575860,活动211秒

6个锁结构,堆大小1136,52个行锁,撤消日志条目5 MySQL线程id 30,操作系统线程句柄13969066137792,查询id 40076 localhost 127.0.0.1我的web用户

---事务处理21475771,有效413秒 6个锁结构,堆大小1136,52个行锁,撤消日志条目5 MySQL线程id 23,操作系统线程句柄139690660976384,查询id 35541 localhost 127.0.0.1 my_web_用户

---事务处理2147575640,有效540秒 6个锁结构,堆大小1136,52个行锁,撤消日志条目28 MySQL线程id 16,操作系统线程句柄13969066177088,查询id 29555 localhost 127.0.0.1 my_web_用户

---事务处理21475372,有效990秒 6个锁结构,堆大小1136,52个行锁,撤消日志条目28 MySQL线程id 11,操作系统线程句柄139690661578496,查询id 4137本地主机127.0.0.1我的web用户

Trx读取视图将不会看到id大于等于2147575373的Trx,而会看到id小于21475373的Trx 文件I/O I/O线程0状态:等待完成的aio请求(插入缓冲区线程)
我假设my_web_用户正在锁定该行。如何解锁该行?

我出现此错误的主要原因是现有进程正在运行,这会阻止在相同的表上执行新进程

试一试


将x替换为您认为导致问题的流程编号

显示完整流程列表;杀死x


在使用workbench的长查询时为我工作

可能重复“没有锁定的表”。虽然技术上正确(因为InnoDB锁定行,而不是表),但您当然有一个锁<代码>显示引擎INNODB状态实际上是一个寻找它的好地方,所以再看看,你可能只是没有找到它。或者将输出添加到您的问题中,我们可能会帮助您找到它。它再次锁定。我将发布引擎输出。您需要在授予锁定时检查状态(因此在错误发生之前)。您将发现类似于
----TRX一直在等待20秒以授予此锁:
。如果您不知道何时发生,并且无法重新启动事务以重复该情况(或者该问题已得到解决,并且您没有再次收到锁定错误),您可以每50秒保存一次状态(可能在cronjob中获取并记录),以便在发生后查看。
Show full processlist; kill x;