我正在运行以下MySQL UPDATE语句:
mysql> update customer set account_import_id = 1;
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
我没有使用事务,为什么会得到这个错误?我甚至尝试重新启动我的MySQL服务器,它没有帮助。
该表有406,733行。
我正在运行以下MySQL UPDATE语句:
mysql> update customer set account_import_id = 1;
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
我没有使用事务,为什么会得到这个错误?我甚至尝试重新启动我的MySQL服务器,它没有帮助。
该表有406,733行。
当前回答
如何强制解锁MySQL中锁定的表:
像这样打破锁可能会导致数据库中的原子性不被强制用于导致锁的sql语句。
这很棘手,正确的解决方案是修复导致锁的应用程序。然而,当美元处于危险之中时,迅速的一脚将使事情再次启动。
1)进入MySQL
mysql -u your_user -p
2)让我们看看锁定的桌子列表
mysql> show open tables where in_use>0;
3)让我们看看当前进程的列表,其中一个正在锁定你的表
mysql> show processlist;
4)终止其中一个进程
mysql> kill <put_process_id_here>;
其他回答
如何强制解锁MySQL中锁定的表:
像这样打破锁可能会导致数据库中的原子性不被强制用于导致锁的sql语句。
这很棘手,正确的解决方案是修复导致锁的应用程序。然而,当美元处于危险之中时,迅速的一脚将使事情再次启动。
1)进入MySQL
mysql -u your_user -p
2)让我们看看锁定的桌子列表
mysql> show open tables where in_use>0;
3)让我们看看当前进程的列表,其中一个正在锁定你的表
mysql> show processlist;
4)终止其中一个进程
mysql> kill <put_process_id_here>;
行数并不大……如果account_import_id不是主键,则在它上创建一个索引。
CREATE INDEX idx_customer_account_import_id ON customer (account_import_id);
有同样的错误,即使我只是更新一个表与一个条目,但重新启动mysql后,它被解决了。
我有2个Doctrine DBAL连接,其中一个是非事务性的(用于重要日志),它们旨在并行运行,而不是相互依赖。
CodeExecution(
TransactionConnectionQuery()
TransactionlessConnectionQuery()
)
我的集成测试被包装到事务中,以便在每次测试后进行数据回滚。
beginTransaction()
CodeExecution(
TransactionConnectionQuery()
TransactionlessConnectionQuery() // CONFLICT
)
rollBack()
我的解决方案是在这些测试中禁用包装事务,并以另一种方式重置db数据。
我在使用python访问mysql数据库时遇到了类似的错误。 python程序使用了while和for循环。 关闭游标和链接在适当的行解决问题 https://github.com/nishishailesh/sensa_host_com/blob/master/sensa_write.py 见第230行 似乎是询问重复链接而没有关闭前一个链接产生了这个错误