前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PT-kill重构版

PT-kill重构版

作者头像
DBA实战
修改2024-09-10 15:40:33
800
修改2024-09-10 15:40:33
举报
文章被收录于专栏:DBA实战

概述

原生Percona版 PT-kill(Perl)工具只是单纯的KILL掉正在运行中的慢SQL,而不能作为一个监控工具使用,例如缺少邮件报警或者微信报警功能,固需要将其重构。

重构版 PT-kill(PHP)从information_schema.PROCESSLIST表中捕获正在运行中的SELECT|ALTER等DML/DDL消耗资源过多的查询,过滤它们,然后杀死它们(可选择不杀)且发邮件/微信报警给DBA和相关开发知悉,避免因慢SQL执行时间过长对数据库造成一定程度的伤害。

(注:慢SQL执行完才记录到slow.log里,执行过程中不记录。)

安装

代码语言:javascript
复制
[root@test19-server07 ]# yum install -y php-process php php-mysql
[root@test19-server07 ]# wget https://github.com/hcymysql/pt-kill/archive/refs/heads/master.zip
[root@test19-server07 ]# unzip master.zip

配置文件修改

代码语言:javascript
复制
默认只杀连接中的慢SQL,保留会话连接,如果想把连接杀掉,需去掉QUERY,开启下面注释
[root@test19-server07 pt-kill-master]# vim pt-kill.php 
  //$kill_sql = "KILL QUERY {$row['ID']}"; //默认只杀连接中的慢SQL,保留会话连接,如果想把连接也杀掉,去掉QUERY
  $kill_sql = "KILL {$row['ID']}";

告警配置

代码语言:javascript
复制
--邮箱配置
[root@test19-server07 pt-kill-master]# cd pt-kill-master/
[root@test19-server07 pt-kill-master]# vim smtp_config.php
<?php
  
    $content = nl2br(file_get_contents(dirname(__FILE__).'/kill.txt'));
    require_once "Smtp.class.php";

    //******************** 配置信息 ********************************
    $smtpserver = "smtp.126.com";//SMTP服务器
    $smtpserverport = 25;//SMTP服务器端口
    $smtpusermail = "wushouyang@126.com";//SMTP服务器的用户邮箱
    $smtpemailto = 'wushouyang@126.com';//发送给谁
    $smtpuser = "wushouyang@126.com";//SMTP服务器的用户帐号,注:部分邮箱只需@前面的用户名
    $smtppass = "123456";//SMTP服务器的授权码
    $mailtitle = "=?UTF-8?B?" . base64_encode("告警! 数据库出现慢SQL,请及时处理!") . "?=";//邮件主题
    $mailcontent = "<h1>".$content."</h1>";//邮件内容
    $mailtype = "HTML";//邮件格式(HTML/TXT),TXT为文本邮件
    //************************ 配置信息 ****************************

?
--weixin配置 
为开启发送微信报警,需要先安装下simplejson-3.8.2.tar.gz
[root@test19-server07 pt-kill-master]# tar zxvf simplejson-3.8.2.tar.gz
[root@test19-server07 pt-kill-master]# cd simplejson-3.8.2
[root@test19-server07 pt-kill-master]# python setup.py build
[root@test19-server07 pt-kill-master]# python setup.py install
然后编辑pt-kill.php脚本
找到
$status1 = system("/usr/bin/python wechat.py 'DBA实战' {$row['DB']}库出现卡顿慢SQL!'{$content1}'");
将其'DBA实战'我的微信号换成你自己的即可。
微信企业号设置
移步https://www.cnblogs.com/linuxprobe/p/5717776.html 看此教程配置。

KILL操作

代码语言:javascript
复制
[root@test19-server07 ]# cd pt-kill-master/
//前台运行
输出相关慢SQL,但是不KILL,发送邮箱、微信告警,关联条件类型select、user
[root@test19-server07 ]# php pt-kill.php -u dbaadmin -p'nfgh**EFGF' -h 10.10.10.7 -P 3306 -B 80 --match-info='select' --match-user='dbaadmin'  --mail --weixin
//后台运行
输出相关慢SQL,同时也KILL,发送邮箱、微信告警
[root@test19-server07 ]# nohup php pt-kill.php -u dbaadmin -p'nfg**FGF' -h 10.10.10.7 -P 3306 -B 80 --match-info='select' --match-user='dbaadmin'  --kill --mail --weixin --daemon 1 & 
//关闭后台运行
[root@test19-server07 ]# php pt-kill.php --daemon 0

以上是工具的使用方法和参数选项。这里说下比较重要的参数:
1、--kill 如果想杀掉慢查询,那么在后面添加该选项;
2、--match-info 可以单独使用,也可以和--match-user结合一起使用;
3、--daemon 1 是开启后台守护进程,如果不添加该选择,可以用系统的crontab代替。该选项要和-I 10(秒)配合一起使用,即每休眠10秒监控一次。0为关闭后台守护进程。

生成日志文件

代码语言:javascript
复制
[root@test19-server07 pt-kill-master]# ll -h
total 16M
-rw-r--r-- 1 root root   846 Mar 20 11:00 kill_2024-03-20_11:36:40_history.txt
-rw-r--r-- 1 root root   563 Mar 20 11:41 kill.txt

参数介绍

代码语言:javascript
复制
Usage:
Options:
-u username
-p password
-h host ip
-P port
-B busytime time seconds 设置慢SQL执行时间触发报警
-I interval time seconds 设置守护进程下间隔监测时间
--kill 如果想杀掉慢查询,加上该选项。
--match-info 匹配杀掉SELECT|INSERT|UPDATE语句
--match-user 匹配杀掉的用户
--daemon 1开启后台守护进程,0关闭后台守护进程
--mail 开启发送邮件报警
--weixin 开启发送微信报警
--help Help
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-03-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA实战 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档