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

MySQL 批量殺死連線四大方法:information_schema、mysqladmin、Shell 腳本、mk-kill

     編輯:MySQL 資料庫相關知識

需要批量終止特定使用者、長時間運行或鎖定的 MySQL 連線時,四種方法各有適用場景。

方法一:information_schema.processlist 生成 KILL 腳本

-- 1. 查看生成的 KILL 語句
SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE user='root';

-- 2. 導出到檔案
SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE user='root' INTO OUTFILE '/tmp/a.txt';

-- 3. 執行
SOURCE /tmp/a.txt;

優點:可靈活過濾(user、db、time、state、info),可預覽再執行。

方法二:mysqladmin 管線批量殺死

# 殺掉所有連線
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

優點:無需登入 MySQL,適合自動化腳本;缺點:需輸入多次密碼(可配合 --password=xxx 或 .my.cnf)。

方法三:Shell 腳本殺掉鎖定連線

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

可擴展:依據 Time、State、Info 等欄位過濾。

方法四:Maatkit mk-kill 專業工具

# 殺掉超過 60 秒的查詢
mk-kill --busy-time 60 --kill

# 僅列印不殺(預覽)
mk-kill --busy-time 60 --print

# 列印並殺掉
mk-kill --busy-time 60 --print --kill

更多參數:官方文檔。
現代替代工具:pt-kill (Percona Toolkit),功能更豐富、維護更積極。

選擇建議

場景推薦方法
需精細過濾、預覽 SQL方法一
自動化腳本、無交互方法二 / pt-kill
臨時手工清理鎖定連線方法三
生產環境常態化治理(長查詢、閒置、特定用戶)pt-kill 守護進程模式

警示:批量 KILL 可能導致事務回滾、應用報錯,務必在低峰期或配合應用熔斷機制執行。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved