我正在运行以下MySQL UPDATE语句:

mysql> update customer set account_import_id = 1;
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

我没有使用事务,为什么会得到这个错误?我甚至尝试重新启动我的MySQL服务器,它没有帮助。

该表有406,733行。


当前回答

迟到的派对(像往常一样),但我的问题是我写了一些糟糕的SQL(作为一个新手)和几个进程对记录有一个锁<-不确定适当的措辞。我最终不得不:SHOW PROCESSLIST,然后使用kill <id>杀死id

其他回答

我在使用php时遇到过这种情况 语言构念退出;正在进行交易。那么这个 事务“挂起”,你需要杀死mysql进程(如上所述processlist;)

有同样的错误,即使我只是更新一个表与一个条目,但重新启动mysql后,它被解决了。

您是否可以更新这个表中的任何其他记录,或者这个表是否被大量使用?我想的是,当它试图获得一个锁,它需要更新这条记录时,设置的超时已经超时。你可以延长时间,这可能会有所帮助。

在做一些测试时,我也遇到过类似的问题。

原因-在我的情况下,事务没有从我的spring引导应用程序提交,因为我在执行期间杀死了@transactional函数(当函数更新一些行时)。由于该事务从未提交到数据库(MySQL)。

结果-不能从任何地方更新这些行。但是能够更新表的其他行。

mysql> update some_table set some_value = "Hello World" where id = 1;
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

解决方案-杀死所有MySQL进程使用

Sudo killall -9 mysqld

Sudo killall -9 mysqld_safe(当发生错误时重新启动服务器,并将运行时信息记录到错误日志中。在我的情况下不需要)

mysql->SHOW PROCESSLIST;
kill xxxx; 

然后杀了睡着的那个。对我来说是2156。