安装pt工具包
安装依赖:
yum install perl-DBI perl-DBD-MySQL
yum install perl-ExtUtils-Embed -y
yum install perl-Digest-MD5 -y
yum install perl-devel -y
官网下载:
https://www.percona.com/downloads/percona-toolkit/LATEST/
#2023-05
https://www.percona.com/software/database-tools/percona-toolkit
安装:
tar -xvf percona-toolkit-3.4.0_x86_64.tar.gz
cd percona-toolkit-3.4.0
perl Makefile.PL
make
make install
安装后工具目录在 /usr/local/下,如需要可配置环境变量
pt-kill使用
说明:默认会过滤掉复制线程,请不必担心杀掉复制线程。
每10s记录一下超过30s的查询语句 输出到/tmp/pt_select.log文件中
pt-kill --host=127.0.0.1 --port=3306 --user=root --password=123456 --match-db='test_db' --match-info "select|SELECT" --busy-time 30 --victims all --interval 10 --daemonize --print --log=/tmp/pt_select.log
每10s找出超过30s的查询语句 直接杀掉
pt-kill --host=127.0.0.1 --port=3306 --user=root --password=123456 --match-db='test_db' --match-info "select|SELECT" --busy-time 30 --victims all --interval 10 --daemonize --kill --log=/tmp/pt_select_kill.log
其中 --daemonize参数表示守护进程;
–victims all 表示kill多个连接,否则只kill最长的那一个
只打印-某IP来源的会话
pt-kill --host=127.0.0.1 --port=3306 --user=root --password=123456 --match-db='test_db' --match-host "192.168.65.129" --busy-time 30 --victims all --interval 10 --daemonize --print --log=/tmp/pt_select.log
执行杀操作-查杀某IP来源的会话
pt-kill --host=127.0.0.1 --port=3306 --user=root --password=123456 --match-db='test_db' --match-host "192.168.65.129" --busy-time 30 --victims all --interval 10 --daemonize --kill --log=/tmp/pt_select_kill.log
只打印-某IP来源的会话
pt-kill --host=192.168.65.128 --port=3306 --user=root --password=rootpwd --match-db='db222' --match-host "192.168.65.129" --busy-time 30 --victims all --interval 10 --daemonize --print --log=/tmp/pt_select.log
执行杀操作-查杀某IP来源的会话
pt-kill --host=192.168.65.128 --port=3306 --user=root --password=rootpwd --match-db='db222' --match-host "192.168.65.129" --busy-time 30 --victims all --interval 10 --daemonize --kill --log=/tmp/pt_select_kill.log
只打印-某用户的会话
pt-kill --host=192.168.65.128 --port=3306 --user=root --password=rootpwd --match-db='db222' --match-user "u2" --busy-time 30 --victims all --interval 10 --daemonize --print --log=/tmp/pt_select.log
执行杀操作-查杀访问某用户的会话
pt-kill --host=192.168.65.128 --port=3306 --user=root --password=rootpwd --match-db='db222' --match-user "u2" --busy-time 30 --victims all --interval 10 --daemonize --kill --log=/tmp/pt_select_kill.log
只打印-正在进行filesort的sql
pt-kill --host=192.168.65.128 --port=3306 --user=root --password=rootpwd --match-db='db222' --match-command Query --match-state "Sorting result" --run-time 1 --busy-time 30 --victims all --interval 10 --daemonize --print --log=/tmp/pt_select.log
执行杀操作-杀掉正在进行filesort的sql
pt-kill --host=192.168.65.128 --port=3306 --user=root --password=rootpwd --match-db='db222' --match-command Query --match-state "Sorting result" --run-time 1 --busy-time 30 --victims all --interval 10 --daemonize --kill --log=/tmp/pt_select_kill.log
如要停止pt-kill,需要ps-ef过滤然后在操作系统上结束进程,或者直接:
kill -9 $(ps -ef| grep pt-kill |grep -v grep |awk '{print $2}')
参考文章:
https://zhuanlan.zhihu.com/p/192830473
https://blog.csdn.net/weixin_42386617/article/details/102459197