我收到以下错误:
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;
另一个网站建议,但我仍然得到相同的错误。任何帮助将不胜感激,谢谢!
答案 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;
现在您可以杀死该线程或等待完成它。