2013-04-10 67 views
2

我有一个查询锁定表在MySQL(使用的是InnoDB):查询锁定表,不能杀死进程

UPDATE table SET status = 2 WHERE status = 3 

这个查询引起死锁在桌子上,无法绕过它。

我试图做的:

show processlist 

然后杀死进程ID,但我不能似乎将其杀死

我想:

kill 9588 

9588是进程ID。

然后我做show processlist我仍然在列表中看到相同的查询。

我该如何强制杀死这个进程,然后为什么这个查询会导致死锁?我该如何解决它?

+0

'杀-9'是操作系统命令,而不是一个MySQL命令。 – tadman 2013-04-10 17:05:29

+0

如果'UPDATE'无法获得任何'status = 3'行的写访问权限,它将会被阻止。我会确保所有的交易都已经提交了他们的变更,并且您没有任何确定'select for update' – cmd 2013-04-10 17:07:20

回答

2

KILL命令请求查询终止,并且该命令的状态应显示为Killed。没有办法强制杀死一些东西并立即终止。

作为最后的手段,您可以随时关闭并重新启动您的mysqld服务器进程。

1

你应该试着在你的计算机上首先杀死mysql/sql service,然后用托盘杀死你正在查询的程序。

希望它会为你工作

+0

好吧,这会导致查询无效。谢谢但我打死了锁! – Mike 2013-04-10 18:33:13

+0

也许我可以帮助你解决你的问题,如果你告诉我更多关于你的数据库和你想做的事情。如果你没有解决它喷气。 – 2013-04-11 10:33:59

+0

这个答案可以通过提供一个示例命令来杀死mysql。 – mopo922 2015-06-30 21:10:05

12

当你运行一个RDS MySQL实例,并想杀死一个线程或出于某种原因查询时,你会发现,因为你没有,你可以不使用KILLmysqladmin kill有权这样做。

RDS提供名为mysql.rds_killmysql.rds_kill_query的存储过程,它们将分别杀死一个线程和一个查询。要杀死一个线程,首先使用SHOW PROCESSLIST来获取线程列表并找到想要杀死的线程的ID。假设线程id是53512,然后使用

CALL mysql.rds_kill(53512) 

来源: http://snak.tumblr.com/post/13856391340/killing-a-thread-or-query-of-mysql-running-on-rds

+0

官方文档:http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.MySQL.CommonDBATasks.html – fideloper 2016-06-30 20:01:21