---- 一更 ----
1. 问题原因已找到
2. 更改标题.
原因并不是线程ID杀不死, 而是, 它正在使劲回滚. 由于delete的数据量很大, 撤销后, 回滚需要多几倍的时间. 过了一晚上, 第二天, 查看时, 已经没有 未提交的事务 了.
原问题
起因时mysql磁盘爆了, 于是删除大表.
不知道怎搞的, 执行了delete * from 表
. 结果崩了...
用的navicat视图工具, navicat界面崩溃, 于是强关.
重启后, 怎么删除都是崩溃.
已做的工作
首先, 根据网上资料, show processlist
查看state
为 waiting for table metadata lock
的任务, 然后kill掉.
但是, 但是, 之后一旦执行删除, 依然是 waiting for table metadata lock
.
然后, 查询 未提交的事务: select * from information_schema.innodb_trx
但是, 但是, 发现怎么kill都kill不了, 一查, 还是存在...
大表不能这样删, 因为中断后 Rolling back 也要很多时间的.
要么用
truncate table tablename
;要么加 limit 每次删一小部分, 保证在删的过程中的基本可用性.