MySQL中超过锁定等待超时

时间:2015-10-15 15:05:44

标签: mysql

我收到以下错误:

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

我做了

show processlist; 

命令并杀死所有进程并运行命令

+ ------ + ------ + ----------- + ------------------- + --------- + ------ + ----------- + --------------------- -------------------------------------------------- ---------- + | Id |用户|主持人| db |命令|时间|国家|信息| + ------ + ------ + ----------- + ------------------- + --- ------ + ------ + ----------- + ------------------------ -------------------------------------------------- ------- + | 1749年| cyee | localhost | CY_Test |杀了| 2308 |查询结束| INSERT INTO CY_Test.patient2010 SELECT * FROM cmsdata-outpatient-2010。patient | | 1755年| cyee | localhost | cmsdata-inpatient |查询| 0 | NULL |显示完整的流程列表| + ------ + ------ + ----------- + ------------------- + --- ------ + ------ + ----------- + ------------------------ -------------------------------------------------- ------- +

set innodb_lock_wait_timeout=1000; 

另一个网站建议,但我仍然得到相同的错误。任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:0)

您可以将锁定时间的变量innodb_lock_wait_timeout = 100设置为100秒。

mysql> set innodb_lock_wait_timeout=100

Query OK, 0 rows affected (0.02 sec)

mysql> show variables like 'innodb_lock_wait_timeout';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 100   |
+--------------------------+-------+

超时的事务,尝试锁定另一个进程持有的表。并且您的超时变量设置为少量秒。所以它显示错误。 您可以通过命令查看更多状态。

SHOW ENGINE INNODB STATUS\G 

您可以通过 -

查看锁定表的列表
 show open tables where in_use>0;

现在看到使用此表的线程

  show full processlist;

现在您可以杀死该线程或等待完成它。