【问题标题】:1205 error: table still locked after a lot of time1205 错误:表在很长时间后仍被锁定
【发布时间】:2013-06-19 20:00:44
【问题描述】:

我有一个查询,我在自己的计算机上的 Mysql 工作台中执行,数据库在远程计算机上。

一段时间后,我收到了 2013 错误(在查询期间丢失了与 MySQL 服务器的连接),查询没有任何效果。后来我尝试了一些不同的查询,我总是得到一个:

Error Code: 1205. Lock wait timeout exceeded; try restarting transaction

这是否意味着我执行的查询(在此期间连接丢失)仍然锁定了表,如果是,我该如何释放表。从第一次查询到现在已经三个小时了。

1205    admin_pw    BSN-176-177-215.dial-up.dsl.siol.net:9054   admin_pw    Query   11217   Sending data    DELETE n1 FROM mm_ads_fields_values n1, mm_ads_fields_values n2
WHERE n1.id < n2.id 
AND n1.aid = n2
1206    admin_pw    BSN-176-177-215.dial-up.dsl.siol.net:9100   admin_pw    Sleep   415     
1208    admin_pw    BSN-176-177-215.dial-up.dsl.siol.net:9281   admin_pw    Query   622 Locked  ALTER IGNORE TABLE mm_ads_fields_values ADD UNIQUE KEY idx1(aid,value)
1308    admin_pw    localhost       Sleep   30      
1309    admin_pw    BSN-176-177-215.dial-up.dsl.siol.net:16938  admin_pw    Query   0       show processlist

show show processlist 的输出,得到 2013 错误的第一个查询是 id 为 1205 的查询。

【问题讨论】:

  • 什么 mysql> 显示进程列表;输出?另外,你在什么操作系统上? Windows 或 Linux
  • 数据库运行在linux上。我使用 Windows。
  • 好的,告诉我 show processlist 说什么,然后你就从那里开始。在 CLI 中杀死进程可能取决于操作系统

标签: mysql deadlock mysql-error-2013 mysql-error-1205


【解决方案1】:

好的,使用 show processlist 的输出,您可以看到 PID 1208 已锁定您的表。在沙盒中,您可以杀死一切并重新开始工作。但在现实生活中,您可能希望杀死拥有锁的 PID 并允许执行剩余的查询。使用上面的输出,您将在 MySQL 中以 root 身份执行以下语句

mysql> kill 1208;

运行它,然后查看您的其他查询是否完成。如果他们不这样做并再次锁定。重复上述过程,然后重新访问您的 SQL。

【讨论】:

  • 感谢您的帮助。虽然开始这一切的查询是 1205,但我先杀了这个,之后那个 1208 甚至不存在了。无论如何,它现在可以工作了。
猜你喜欢
  • 1970-01-01
  • 2011-02-05
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多