/**php
Percona PT-kill重構版(PHP)html
UPDATE:mysql
Modified by: hcymysql 2018/11/27linux
一、增長慢SQL郵件報警功能git
二、增長慢SQL微信報警功能github
環境準備:sql
shell> yum install -y php-process php php-mysqlshell
*/數據庫
概述 原生Percona版 PT-kill(Perl)工具只是單純的KILL掉正在運行中的慢SQL,而不能做爲一個監控工具使用,例如缺乏郵件報警或者微信報警功能,固須要將其重構。
重構版 PT-kill(PHP)從information_schema.PROCESSLIST表中捕獲正在運行中的SELECT|ALTER等DML/DDL消耗資源過多的查詢,過濾它們,而後殺死它們(可選擇不殺)且發郵件/微信報警給DBA和相關開發知悉,避免因慢SQL執行時間過長對數據庫形成必定程度的傷害。(注:慢SQL執行完才記錄到slow.log裏,執行過程當中不記錄。)
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
Example :
前臺運行
shell> php pt-kill.php -u admin -p 123456 -h 10.10.159.31 -P 3306 -B 10 --match-info='select|alter' --match-user='dev' --kill --mail --weixin
後臺運行
shell> php pt-kill.php -u admin -p 123456 -h 10.10.159.31 -P 3306 -B 10 -I 15 --match-info='select|alter' --match-user='dev' --kill --mail --weixin --daemon 1
關閉後臺運行
shell> php pt-kill.php --daemon 0
以上是工具的使用方法和參數選項。 這裏說下比較重要的參數:
一、--kill 若是想殺掉慢查詢,那麼在後面添加該選項;
二、--match-info 能夠單獨使用,也能夠和--match-user結合一塊兒使用;
三、--daemon 1 是開啓後臺守護進程,若是不添加該選擇,能夠用系統的crontab代替。 該選項要和-I 10(秒)配合一塊兒使用,即每休眠10秒監控一次。0爲關閉後臺守護進程。
四、--mail 爲開啓發送郵件報警,需先設置smtp_config.php,改爲你本身的郵箱帳號信息
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 = "chunyang_he@126.com";//SMTP服務器的用戶郵箱
$smtpemailto = 'chunyang_he@126.com';//發送給誰
$smtpuser = "chunyang_he@126.com";//SMTP服務器的用戶賬號,注:部分郵箱只需@前面的用戶名
$smtppass = "123456";//SMTP服務器的受權碼
$mailtitle = "警告!出現卡頓慢SQL,請及時優化處理!";//郵件主題
$mailcontent = "<h1>".$content."</h1>";//郵件內容
$mailtype = "HTML";//郵件格式(HTML/TXT),TXT爲文本郵件
//************************ 配置信息 ****************************
?>
五、--weixin 爲開啓發送微信報警,須要先安裝下simplejson-3.8.2.tar.gz
shell> tar zxvf simplejson-3.8.2.tar.gz
shell> cd simplejson-3.8.2
shell> python setup.py build
shell> python setup.py install
而後編輯pt-kill.php腳本 找到 $status1 = system("/usr/bin/python wechat.py 'hcymysql' {$row['DB']}庫出現卡頓慢SQL! '{$content1}'"); 將其'hcymysql'個人微信號換成你本身的便可。
微信企業號設置 移步https://www.cnblogs.com/linuxprobe/p/5717776.html 看此教程配置。
六、會在工具目錄下生成kill.txt文件保存慢SQL。
shell> cat kill.txt
2018-11-27 16:41:22
用戶名:root
來源IP:localhost
數據庫名:hcy
執行時間:18
SQL語句:select sleep(60)
七、默認只殺鏈接中的慢SQL,保留會話鏈接,若是想把鏈接也殺掉,去掉QUERY
修改pt-kill.php
//$kill_sql = "KILL QUERY {$row['ID']}";
$kill_sql = "KILL {$row['ID']}";
具體演示請看「pt_kill演示錄像.avi」