簡介
pt-kill 是一款用于 kill MySQL 連接的工具,它是 percona-toolkit 的一部分。在因空閑連接較多導致超過最大連接數,或某個有問題的 SQL 導致 MySQL 負載很高時,可以使用 pt-kill 來終止一些連接,以保護數據庫。pt-kill 可以通過連接 MySQL 并執行show processlist命令來獲取查詢語句,然后根據指定的條件篩選出需要 kill 的查詢,并執行相應的操作,如 kill、打印等。它支持多種匹配條件,如查詢執行時間、命令類型、用戶、主機、數據庫等。
官方文檔://docs.percona.com/percona-toolkit/pt-kill.html
1.安裝percona-toolkit:
#!/bin/bash
#官網下載地址,版本可選://www.percona.com/downloads
wget //downloads.percona.com/downloads/percona-toolkit/3.2.0/binary/tarball/percona-toolkit-3.2.0_x86_64.tar.gz
tar zxf percona-toolkit-3.2.0_x86_64.tar.gz -C /usr/bin
echo 'export PATH=/usr/bin/percona-toolkit-3.2.0/bin:$PATH' >>/etc/profile
source /etc/profile

2.安裝pt-kill依賴包
- 查看percona-toolkit的官方文檔,了解其具體的依賴要求。官方文檔通常會列出工具所需要的 Perl 模塊以及其他相關的依賴項。 檢查系統中是否已經安裝了所需的 Perl 模塊。可以使用以下命令檢查,檢查是否安裝了perl-DBI、perl-DBD-MySQL、perl-Time-HiRes和perl-IO-Socket-SSL等模塊。
rpm -qa perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL
- 如果有依賴包缺失,可以使用相應的包管理工具進行安裝,例如在基于 Red Hat 的系統上使用
yum install perl-DBI yum install perl-DBD-MySQL yum install perl-Time-HiRes yum install perl-IO-Socket-SSL
- 還需要確保系統中安裝了perl-Digest-MD5模塊。如果未安裝,可以使用以下命令進行安裝
yum -y install perl-Digest-MD5
3.參數介紹:
- 連接參數
--host=:指定要連接的 MySQL 主機名或 IP 地址。
--port=:指定要連接的 MySQL 端口號。
--user=:指定連接 MySQL 的用戶名。
--password=:指定連接 MySQL 的密碼。
- 篩選會話的規則
--match-user=:匹配特定的用戶名。
--match-host=:匹配特定的主機名或 IP 地址。
--match-db=:匹配特定的數據庫名。
--match-command=:匹配特定的命令,例如Sleep、Query等。
--busy-time/idle-time=:匹配執行時間超過或空閑時間超過指定值的連接,單位可以是秒或分鐘。
--match-state=:匹配特定的狀態,例如Sleep、Running等。
--match-info=:匹配連接的其他信息,例如查詢語句。
--ignore-user=:忽略特定的用戶名。
--ignore-host=:忽略特定的主機名或 IP 地址。
--ignore-db=:忽略特定的數據庫名。
--ignore-command=:忽略特定的命令。
--ignore-state=:忽略特定的狀態。
--ignore-info=:忽略連接的其他信息。
- 執行動作的參數
--kill:殺掉匹配的連接并退出會話。
--kill-query:只殺掉執行的語句,不退出會話。
--print:只打印出匹配的會話,不殺。
--victims:指定要 kill 的連接類型,可以是oldest(只殺最古老的查詢)或all(殺死所有匹配的查詢)。
- 其他參數
--daemonize:以守護進程的形式運行。
--interval=:間隔多久運行一次,默認30s。
--run-time=:運行多久后退出。
--config:指定配置文件。
--group-by:按照指定的條件對查詢結果進行分組。
4.操作示例
pt-kill --host xxxxx --port 3306 --user root --password xxxxxxx --match-command Query --busy-time 5 --kill --victims all
在上述命令中
--match-command Query指定要匹配的命令為查詢操作
--busy-time 5表示查詢時間超過5秒
--kill表示執行終止操作
--victims all表示終止所有滿足條件的連接