萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 批次 Kill 鎖定/阻塞進程:information_schema.processlist 實戰技巧

方法一:動態產生 KILL 指令 (單條 SQL)


-- 1. 產生 KILL 語句
SELECT CONCAT('KILL ', id, ';')
FROM information_schema.processlist
WHERE user = 'root' AND state = 'Locked';  -- 可加更多條件

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

-- 3. 執行
SOURCE /tmp/kill_list.sql;

方法二:工作檯/客戶端圖形介面

  1. 開啟 information_schema.processlist 表
  2. 全選目標進程 → 右鍵 → 「Kill Process」
  3. 或直接刪除列 (視工具而定)

進階篩選條件範例


-- 找執行超過 60 秒的查詢
SELECT id, user, host, db, command, time, state, LEFT(info, 100)
FROM information_schema.processlist
WHERE time > 60 AND command != 'Sleep';

-- 找特定資料庫的長連線
SELECT id FROM information_schema.processlist
WHERE db = 'my_db' AND time > 300;

KILL 權限說明

  • 需 PROCESS 權限查看所有進程
  • 需 CONNECTION_ADMIN (MySQL 8.0+) 或 SUPER (舊版) 執行 KILL
  • 只能 Kill 自己的進程,除非有 SUPER 權限

自動化監控腳本雛形


#!/bin/bash
# 長查詢自動 Kill (謹慎使用!)
LONG_QUERY=300  # 秒
mysql -e "SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE time > $LONG_QUERY AND command='Query' AND user='app_user' INTO OUTFILE '/tmp/auto_kill.sql';"
mysql -e "SOURCE /tmp/auto_kill.sql;"

警告:生產環境自動 Kill 風險極高,建議改為**告警通知**人工介入。

copyright © 萬盛學電腦網 all rights reserved