mysql kill 回话_分享mysql数据库一款杀会话利器-pt-kill-建站-站长头条

概述

生产环境中我们时常遇到这样的情况,数据库性能恶劣,需要马上杀掉全部会话,不然数据库就挂起来。我们可以先找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读取输入。

cfa47959d9cc5fa363e7d95fd67a0083.png

二、实例

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

3c50a4334ff6dee8991df3c4771e7272.png2、按照会话连接的主机杀会话

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

ccf1e24590fdf3586379b143643366ac.png3、按照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

09afefc1529669c04205738419fd5c1e.png2、mysqladmin工具

mysqladmin -uroot -pxxx processlist|awk -F "|" '{print $2}'|egrep "[0-9][0-9]*"|xargs -n 1 mysqladmin -uroot -pxxx kill

ce359b708e9c6c9176af0d06be44d0cd.png3、循环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

觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

bf908208b98a898be67e0ff76bd42dcd.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值