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读取输入。

1f13f00a145598c4bef76c98ae3361da.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
749c92ca949ff85c6fcecb113b633b1b.png

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
451d4be19f6691064c80320862ffb768.png

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
8e52561810a7785ff068ae95fdca5034.png

2、mysqladmin工具

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

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

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

8f7f1f6e2931bbba9333d0f5f11b0288.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值