我在MySQL中有一个查询锁定表(使用InnoDB):
UPDATE table SET status = 2 WHERE status = 3
这个查询在表上引起了死锁,无法绕过它。
我尝试做了以下操作:
show processlist
然后杀死进程ID,但我似乎无法杀死它。
我尝试过:
kill 9588
9588是进程ID。
接着我执行show processlist
,在列表中仍然看到同一个查询。
我该如何强制终止这个进程?同时,为什么这个查询会导致死锁?我该如何解决它?
我在MySQL中有一个查询锁定表(使用InnoDB):
UPDATE table SET status = 2 WHERE status = 3
这个查询在表上引起了死锁,无法绕过它。
我尝试做了以下操作:
show processlist
然后杀死进程ID,但我似乎无法杀死它。
我尝试过:
kill 9588
9588是进程ID。
接着我执行show processlist
,在列表中仍然看到同一个查询。
我该如何强制终止这个进程?同时,为什么这个查询会导致死锁?我该如何解决它?
CALL mysql.rds_kill(53512)
Source: http://snak.tumblr.com/post/13856391340/killing-a-thread-or-query-of-mysql-running-on-rds
Select concat('CALL mysql.rds_kill(',id,');') from information_schema.processlist;
- Suresh VelusamyKILL
命令请求查询终止,命令状态应显示为Killed
。没有方法可以强制终止进程并立即终止。作为最后的手段,您可以随时关闭和重新启动mysqld
服务器进程。mysqld
处于一个不可终止的状态,根本无法关闭。如果它不能够安静地关闭,你可能需要强制重启。 - tadman> show processlist;
> kill query processId;
查询参数指定我们需要终止查询命令进程。
杀死进程的语法如下:
KILL [CONNECTION | QUERY] processlist_id
请参考此链接获取更多信息。
首先,您需要尝试关闭计算机上的 mysql/sql 服务
,然后再尝试关闭运行查询的程序。
希望这对您有所帮助。
UPDATE
无法获取status=3
的任何行的写入访问权限,它将会被阻塞。请确保所有事务都已提交其更改,并且没有未完成的select for update
。 - cmd