-- 產生 KILL 語句
SELECT CONCAT('KILL ', id, ';')
FROM information_schema.processlist
WHERE user = 'root';
-- 匯出到檔案執行
SELECT CONCAT('KILL ', id, ';')
FROM information_schema.processlist
WHERE user = 'root'
INTO OUTFILE '/tmp/kill.sql';
SOURCE /tmp/kill.sql;
# 殺掉所有連線
mysqladmin -uroot -p processlist | awk -F "|" '{print $2}' | xargs -n 1 mysqladmin -uroot -p kill
# 殺掉指定使用者(如 Mike)
mysqladmin -uroot -p processlist | awk -F "|" '{if($3 == "Mike") print $2}' | xargs -n 1 mysqladmin -uroot -p kill
#!/bin/bash
# kill_locked.sh
for id in $(mysqladmin processlist | grep -i locked | awk '{print $1}'); do
mysqladmin kill ${id}
done
# 殺掉執行超過 60 秒的查詢
mk-kill --busy-time 60 --kill
# 僅列印不殺(預演)
mk-kill --busy-time 60 --print
# 列印並殺掉
mk-kill --busy-time 60 --print --kill
更多用法:mk-kill 文件
| 方法 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| information_schema | 純 SQL,可精細過濾條件 | 需兩步驟,權限需 FILE 權限 | 需複雜條件篩選(用戶、資料庫、時間等) |
| mysqladmin + awk | 單行指令,無需登入 MySQL | 解析輸出格式易出錯 | 快速清理所有/特定用戶連線 |
| Shell 腳本 | 可擴展邏輯(如只殺 Locked) | 需部署腳本 | 定時清理卡死連線 |
| mk-kill | 功能最豐富(時間、查詢類型、IDLE 等) | 需額外安裝 Perl 模組 | 生產環境常態化治理 |
💡 建議:平時用 mk-kill 設定規則常態化清理;緊急手動清理用 information_schema 法最可控。