mysql - 查询正在锁定表,无法终止该进程

标签 mysql deadlock database-deadlocks kill-process

我在 MySQL 中有一个查询锁定表(使用 InnoDB):

UPDATE table SET status = 2 WHERE status = 3

此查询导致表上出现死锁并且无法绕过它。

我试图做:
show processlist

然后杀死进程ID,但我似乎无法杀死它

我试过:
kill 9588

9588 是进程 ID。

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

我怎样才能强制终止这个进程,然后为什么这个查询会导致死锁?我该如何解决?

最佳答案

当你在 RDS 上运行 MySQL 实例,由于某种原因想要杀死一个线程或一个查询时,你会发现你不能使用 KILLmysqladmin kill因为你没有这样做的权限。

RDS 提供了名为 mysql.rds_kill 的存储过程。和 mysql.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

关于mysql - 查询正在锁定表,无法终止该进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15932058/

相关文章:

java - 如果在静态初始化程序 block 中创建线程,程序将挂起

php - 避免 MySQL 'Deadlock found when trying to get lock; try restarting transaction'

mysql - 表设计在多大程度上导致了死锁的发生?

PHP数组循环迭代并将获取的结果放入MySQL表中

php - 使用 PHP 按类别对 MYSQL 结果进行排序

PHP 插入 MySql

deadlock - 在什么情况下僵局是好事?

c - 使用 pthread 的简单死锁示例

mysql - 更新 MySQL 查询错误 "Subquery returns more than 1 row"