为啥在尝试更新 MySQL 条目时出现“超过锁定等待超时”错误?

Posted

技术标签:

【中文标题】为啥在尝试更新 MySQL 条目时出现“超过锁定等待超时”错误?【英文标题】:Why am I getting a "Lock wait timeout exceeded" error while trying to update a MySQL entry?为什么在尝试更新 MySQL 条目时出现“超过锁定等待超时”错误? 【发布时间】:2015-12-10 23:39:12 【问题描述】:

我有一个数据库,我正在尝试更新其中的行值,但出现“锁定等待超时”错误。表格是这样的:

mysql> use rti;
Database changed
mysql> explain resin_products;
+--------------------+--------------+------+-----+---------+-------+
| Field              | Type         | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| resin_product_id   | int(11)      | NO   | PRI | NULL    |       |
| manufacturer       | varchar(45)  | YES  |     | NULL    |       |
| name               | varchar(45)  | YES  |     | NULL    |       |
| model_number       | varchar(45)  | YES  |     | NULL    |       |
| resin_type         | varchar(45)  | YES  |     | NULL    |       |
| primary_type       | varchar(45)  | YES  |     | NULL    |       |
| group              | varchar(45)  | YES  |     | NULL    |       |
| teir               | varchar(45)  | YES  |     | NULL    |       |
| chemical_structure | varchar(45)  | YES  |     | NULL    |       |
| physical_structure | varchar(45)  | YES  |     | NULL    |       |
| color              | varchar(45)  | YES  |     | NULL    |       |
| total_capacity     | varchar(45)  | YES  |     | NULL    |       |
| salt_split_CAP     | varchar(45)  | YES  |     | NULL    |       |
| price_per_cuft     | varchar(45)  | YES  |     | NULL    |       |
| comments           | varchar(500) | YES  |     | NULL    |       |
+--------------------+--------------+------+-----+---------+-------+

命令如下:

mysql> UPDATE resin_products SET price_per_cuft='00.04' WHERE resin_product_id=1;

这是大约 30 秒后出现的错误:

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

这是我的“lock_wait”变量设置的:

mysql> show variables like 'lock_wait_timeout';
+-------------------+----------+
| Variable_name     | Value    |
+-------------------+----------+
| lock_wait_timeout | 31536000 |
+-------------------+----------+
1 row in set (0.00 sec)

【问题讨论】:

Getting “Lock wait timeout exceeded; try restarting transaction” even though I'm not using a transaction的可能重复 或Fixing “Lock wait timeout exceeded; try restarting transaction” for a 'stuck" Mysql table? 查看结果 > SHOW ENGINE INNODB STATUS; 【参考方案1】:

先看锁表列表:

show open tables where in_use>0;

您还可以看到正在使用此表的线程:

show full processlist;

然后你可以杀死那个线程

kill 141;

【讨论】:

我没有遇到任何打开的表格问题。这就是我得到的:mysql> show open tables where in_use>0;空集(0.00 秒)我将尝试再次运行产生错误的命令,然后立即执行 show open tables where in_use>0; 可以通过命令查看更多状态:SHOW ENGINE INNODB STATUS\G 原来是进程运行时间过长。我跑了SHOW FULL PROCESSLIST;,然后把他们都杀了。这解决了问题。

以上是关于为啥在尝试更新 MySQL 条目时出现“超过锁定等待超时”错误?的主要内容,如果未能解决你的问题,请参考以下文章

尝试向 MySQL 中的 table.column 添加唯一约束时出现重复条目​​错误

为啥在尝试更新数据库时出现语法错误?

为啥在使用简单存储过程时出现 MySQL 错误 #1312?

为啥在 C# .Net Core 3 中连接到 MySql 时出现错误

尝试在存储过程中更新时出现 MySQL 错误代码 1175

为啥当我看到通配符条目时出现 javax.net.ssl.SSLHandshakeException: No subject Alternative DNS name matching found 异