首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 批量 Kill 長時間運行 SQL 完整指南(4 種方法)

     編輯:MySQL 資料庫相關知識

面對大量阻塞連線,手工 KILL 不現實。本文提供 4 種批量終止方案:information_schema 生成腳本、mysqladmin 管道、Shell 迴圈、Maatkit mk-kill 專業工具。

KILL 基礎語法

KILL [CONNECTION | QUERY] thread_id
-- CONNECTION:斷開連線(預設)
-- QUERY:僅終止當前語句,保持連線

需 PROCESS 權限查看所有線程,SUPER 權限殺掉所有線程。

方法一:information_schema + 腳本文件(推薦可控)

-- 1. 生成 KILL 語句至檔案
SELECT CONCAT('KILL ', id, ';')
FROM information_schema.processlist
WHERE user = 'root' AND time > 60
INTO OUTFILE '/tmp/kill_list.sql';

-- 2. 執行腳本
SOURCE /tmp/kill_list.sql;

方法二:mysqladmin 管道命令

# 殺掉所有連線
mysqladmin -uroot -p processlist | awk -F'|' '{print $2}' | xargs -n1 mysqladmin -uroot -p kill

# 殺掉指定用戶
mysqladmin -uroot -p processlist | awk -F'|' '$3=="Mike"{print $2}' | xargs -n1 mysqladmin -uroot -p kill

方法三:Shell 迴圈殺鎖定連線

for id in $(mysqladmin processlist | grep -i locked | awk '{print $1}'); do
  mysqladmin kill ${id}
done

方法四:Maatkit mk-kill 專業工具(最強大)

# 僅預覽超過 60 秒的查詢
mk-kill --busy-time 60 --print

# 直接殺掉並輸出
mk-kill --busy-time 60 --print --kill

# 更多條件:--match-command, --match-user, --victims (all/oldest/youngest) 等

官網:mk-kill 文檔

注意事項

  • KILL 只是打標記,線程在特定檢查點(讀取行、刷盤等)才真正退出。
  • 終止 REPAIR TABLE/OPTIMIZE TABLE 會導致 MyISAM 表損壞,**極度謹慎**。
  • 事務中 KILL QUERY 不會自動回滾,需應用層處理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved