简介
pt-kill 是一款用于 kill MySQL 连接的工具,它是 percona-toolkit 的一部分。在因空闲连接较多导致超过最大连接数,或某个有问题的 SQL 导致 MySQL 负载很高时,可以使用 pt-kill 来终止一些连接,以保护数据库。pt-kill 可以通过连接 MySQL 并执行show processlist命令来获取查询语句,然后根据指定的条件筛选出需要 kill 的查询,并执行相应的操作,如 kill、打印等。它支持多种匹配条件,如查询执行时间、命令类型、用户、主机、数据库等。
官方文档:https://docs.percona.com/percona-toolkit/pt-kill.html
1.安装percona-toolkit:
#!/bin/bash
#官网下载地址,版本可选:https://www.percona.com/downloads
wget https://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表示终止所有满足条件的连接