关于mysql--General error: 1205 Lock wait timeout exceeded错误。
遇见问题环境:magento操作产品时遇到。
错误提示:
SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction, query was: UPDATE `catalog_product_entity` SET `entity_type_id` = ?, `attribute_set_id` = ?, `type_id` = ?, `sku` = ?, `has_options` = ?, `required_options` = ?, `created_at` = '2018-04-21 14:06:11', `updated_at` = '2018-06-27 09:02:18' WHERE (`entity_id`=2608)
解决方法1:
登录mysql运行SHOW PROCESSLIST;命令得到以下信息:
ou will get the following output
+———+—————–+——————-+—————–+———+——+——-+——————+———–+—————+———–+
| Id | User | Host | db | Command | Time | State | Info | Rows_sent | Rows_examined | Rows_read |
+———+—————–+——————-+—————–+———+——+——-+——————+———–+—————+———–+
| 6794372 | db_user| 222.11.0.65:21532 | db_name| Sleep | 3800 | | NULL | 0 | 0 | 0 |
| 6794475 | db_user| 222.11.0.65:27488 | db_name| Sleep | 3757 | | NULL | 0 | 0 | 0 |
| 6794550 | db_user| 222.11.0.65:32670 | db_name| Sleep | 3731 | | NULL | 0 | 0 | 0 |
| 6794797 | db_user| 222.11.0.65:47424 | db_name | Sleep | 3639 | | NULL | 0 | 0 | 0 |
| 6794909 | db_user| 222.11.0.65:56029 | db_name| Sleep | 3591 | | NULL | 0 | 0 | 0 |
| 6794981 | db_user| 222.11.0.65:59201 | db_name| Sleep | 3567 | | NULL | 0 | 0 | 0 |
| 6795096 | db_user| 222.11.0.65:2390 | db_name| Sleep | 3529 | | NULL | 0 | 0 | 0 |
| 6795270 | db_user| 222.11.0.65:10125 | db_name | Sleep | 3473 | | NULL | 0 | 0 | 0 |
你可以看到
6794372这个命令是sleep,时间是3800.这是阻止其他操作
这些进程应该使用命令一个一个地杀死。
KILL 6794372;
一旦你杀死了所有睡眠连接,事情应该再次正常开始
解决方法二:
通过设置innodb_lock_wait_timeout来增加InnoDB的锁定等待超时值,默认是50秒。
运行show variables like 'innodb_lock_wait_timeout';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 50 |
+--------------------------+-------+
1 row in set (0.01 sec)
修改
innodb_lock_wait_timeout
到120秒,解决问题,具体时间自己测试定。