分享mysql数据库一款杀会话利器--pt-kill

分享mysql数据库一款杀会话利器--pt-kill

游戏|数码彩彩2024-03-16 7:42:15494A+A-

概述

生产环境中我们时常遇到这样的情况,数据库性能恶劣,需要马上杀掉全部会话,不然数据库就挂起来。我们可以先找show processlist的输出来杀会话,但是比较麻烦。pt-kill为我们解决了杀会话问题。

pt-kill是用来kill MySQL连接的一个工具,在MySQL中因为空闲连接较多导致超过最大连接数,或某个有问题的sql导致mysql负载很高时,需要将其KILL掉来保证服务器正常运行。


一、用法

 pt-kill [OPTIONS] [DSN]

pt-kill杀死MySQL连接。如果没有给出文件,pt-kill连接到MySQL然后从“ SHOW PROCESSLIST ”命令输出中获取查询。否则,就从包含有“ SHOW PROCESSLIST ”输出的一个或者多个文件中读取查询。如果文件是“ - ”,pt-kill从STDIN读取输入。

分享mysql数据库一款杀会话利器--pt-kill

 


二、实例

1、按照用户杀会话

pt-kill --host=localhost --user=root --password=asd] --port=3306 --busy-time 15 
--match-user="myuser|perf_stat" --victim all --interval 1 --kill --pid=/tmp/ptkill.pid --print --log=/home/pt-kill.log
分享mysql数据库一款杀会话利器--pt-kill

 

2、按照会话连接的主机杀会话

pt-kill --host=localhost --user=root --password=asd] --port=3306 --busy-time 15 
--match-host="172.26.166.108" --victim all --interval 1 --kill --pid=/tmp/ptkill.pid --print --log=/home/pt-kill.log
分享mysql数据库一款杀会话利器--pt-kill

 

3、按照command匹配杀会话

pt-kill --host=localhost --user=root --password=ads] --port=3306 --busy-time 15 
--match-command="query|Execute" --victim all --interval 1 --kill --daemonize --pid=/tmp/ptkill.pid --print --log=/home/pt-kill.log

注:测试通过按command来杀掉线程,注意command的内容一定要严格匹配大小写,否则会杀不掉。 注意--match-command多个command之间用 | 分隔,否则会失效。

Query,Sleep,Binlog Dump,Connect,Delayed insert,Execute,Fetch,Init DB,Kill,Prepare,Processlist,Quit,Reset stmt,Table Dump

4、按state杀会话

pt-kill --host=localhost --user=root --password=asd] --port=3306 --busy-time 15 
--match-state="Locked | Sending data" --victim all --interval 1 --kill --daemonize --pid=/tmp/ptkill.pid --print --log=/home/pt-kill.log

注:测试通过按state 来杀掉线程,注意state 的内容一定要严格匹配大小写,否则会杀不掉。注意--match-state多个state之间用 | 分隔,否则会失效。

(state类型有:Locked,login,copy to tmp table,Copying to tmp table,Copying to tmp table on disk,Creating tmp table,executing,Reading from net,Sending data,Sorting for order,Sorting result,Table lock,Updating)

5、查杀大于30s的会话

pt-kill --host=localhost --user=root --password=asd] --port=3306 --match-db='cctest' 
--match-command="Query" --busy-time 30 --victims all --interval 10 --daemonize --kill --print --log=/tmp/kill.log

6、按info关键字 kill

pt-kill --host=localhost --user=root --password=asd --port=3306 --busy-time 15 
--match-info="SELECT | DELETE" --victim all --interval 1 --kill --daemonize --pid=/tmp/ptkill.pid --print --log=/home/pt-kill.log

注:测试通过按info来杀掉线程,注意info的内容一定要严格匹配大小写,否则会杀不掉。注意--match-info多个info之间用 | 分隔,否则会失效。

--ignore-info / --match-info

(info可以使用select、update、insert、delete来进行匹配,并可使用"|"进行多项匹配,如"select|SELECT|delete|DELETE|update|UPDATE")


三、杀掉全部外部连接(慎重执行)

1、拼sql

select concat('KILL ',id,';') from information_schema.processlist into outfile '/tmp/kill.sql'; 
source /tmp/kill.sql
分享mysql数据库一款杀会话利器--pt-kill

 

2、mysqladmin工具

mysqladmin -uroot -pxxx processlist|awk -F "|" '{print $2}'|egrep "[0-9][0-9]*"|xargs -n 1 mysqladmin -uroot -pxxx kill
分享mysql数据库一款杀会话利器--pt-kill

 

3、循环kill

for id in `mysqladmin -uroot -pxx processlist|awk -F "|" '{print $2}'|egrep "[0-9][0-9]*"`
do
 mysqladmin -uroot -pxx -hlocalhost kill ${id}
done
点击这里复制本文地址 版权声明:本文内容由网友提供,该文观点仅代表作者本人。本站(https://www.angyang.net.cn)仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

昂扬百科 © All Rights Reserved.  渝ICP备2023000803号-3网赚杂谈