pt-kill:Percona Toolkit 組件,專門從 SHOW PROCESSLIST 或文件中讀取連接,按規則**打印/殺查詢/殺連接/執行自定義動作**,防止長查詢/空閒連接佔用資源影響線上業務。
# CentOS/RHEL yum install percona-toolkit -y # 或下載 deb/rpm 包手動安裝 # 官網:https://www.percona.com/doc/percona-toolkit/
pt-kill \ --log-dsn D=testdb,t=kill_log \ --create-log-table \ --host=host2 --user=root --password=root --port=3306 \ --busy-time=10 \ --print --kill-query \ --match-info "SELECT|select" \ --victims all
效果: 自動建表 testdb.kill_log 記錄操作,殺掉所有執行超 10 秒的 SELECT 查詢(大小寫兼容),默認 5 秒檢查一次。
# /tmp/pt-kill.conf host=host2 user=root password=root port=3306 busy-time=10 print kill-query
pt-kill --config /tmp/pt-kill.conf --log-dsn D=testdb,t=kill_log --create-log-table --match-info "SELECT|select" --victims all
| 值 | 行為 |
|---|---|
oldest(默認) | 僅殺運行最久的 1 個匹配查詢,保護長期等待的非真慢查詢 |
all | 殺掉**所有**匹配連接 |
all-but-oldest | 殺掉所有匹配,**保留運行最久的 1 個** |
--busy-time N:查詢**運行時間**超過 N 秒--idle-time N:Sleep **空閒時間**超過 N 秒(需 --match-command Sleep)| 列 | 匹配參數 | 忽略參數 | 典型值 |
|---|---|---|---|
| Command | --match-command | --ignore-command | Query, Sleep, Binlog Dump, Connect, Execute, Fetch, Init DB, Kill, Prepare, Processlist, Quit, Reset stmt, Table Dump |
| db | --match-db | --ignore-db | 數據库名 |
| Host | --match-host | --ignore-host | IP/主機名 |
| Info | --match-info | --ignore-info | SQL 文本(正則,區分大小寫) |
| State | --match-state | --ignore-state | Locked, login, Copying to tmp table, Sending data, Sorting result, Table lock, Updating... |
| User | --match-user | --ignore-user | 用戶名 |
--kill:殺連接(線程終止)--kill-query:殺查詢(語句終止,連接保留)--print:僅打印(預演/審計)--execute-command:執行自定義命令(如發送告警)--host 僅支援單值,**無法一個進程監控多實例**pt-kill@.service 實例化多進程,或編寫調度腳本輪詢多實例--daemonize --kill-query,非核心實例定時 --print 預演後再開啟殺操作pt-kill 以「豐富匹配維度 + 靈活受害者策略 + 多種執行動作 + 日誌審計」構建了專業的連接治理工具。**配置文件化 + Systemd 守護 + 告警聯動** 是生產級落地的標準範式。