您好,登錄后才能下訂單哦!
/**
Percona PT-kill重構(gòu)版(PHP)
https://github.com/hcymysql/pt-kill
UPDATE:
Modified by: hcymysql 2018/11/27
1、增加慢SQL郵件報(bào)警功能
2、增加慢SQL微信報(bào)警功能
環(huán)境準(zhǔn)備:
shell> yum install -y php-process php php-mysql
*/
概述 原生Percona版 PT-kill(Perl)工具只是單純的KILL掉正在運(yùn)行中的慢SQL,而不能作為一個(gè)監(jiān)控工具使用,例如缺少郵件報(bào)警或者微信報(bào)警功能,固需要將其重構(gòu)。
重構(gòu)版 PT-kill(PHP)從information_schema.PROCESSLIST表中捕獲正在運(yùn)行中的SELECT|ALTER等DML/DDL消耗資源過多的查詢,過濾它們,然后殺死它們(可選擇不殺)且發(fā)郵件/微信報(bào)警給DBA和相關(guān)開發(fā)知悉,避免因慢SQL執(zhí)行時(shí)間過長(zhǎng)對(duì)數(shù)據(jù)庫(kù)造成一定程度的傷害。(注:慢SQL執(zhí)行完才記錄到slow.log里,執(zhí)行過程中不記錄。)
Usage:
Options:
-u username
-p password
-h host ip
-P port
-B busytime time seconds 設(shè)置慢SQL執(zhí)行時(shí)間觸發(fā)報(bào)警
-I interval time seconds 設(shè)置守護(hù)進(jìn)程下間隔監(jiān)測(cè)時(shí)間
--kill 如果想殺掉慢查詢,加上該選項(xiàng)。
--match-info 匹配殺掉SELECT|INSERT|UPDATE語句
--match-user 匹配殺掉的用戶
--daemon 1開啟后臺(tái)守護(hù)進(jìn)程,0關(guān)閉后臺(tái)守護(hù)進(jìn)程
--mail 開啟發(fā)送郵件報(bào)警
--weixin 開啟發(fā)送微信報(bào)警
--help Help
Example :
前臺(tái)運(yùn)行
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
后臺(tái)運(yùn)行
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
關(guān)閉后臺(tái)運(yùn)行
shell> php pt-kill.php --daemon 0
以上是工具的使用方法和參數(shù)選項(xiàng)。 這里說下比較重要的參數(shù):
1、--kill 如果想殺掉慢查詢,那么在后面添加該選項(xiàng);
2、--match-info 可以單獨(dú)使用,也可以和--match-user結(jié)合一起使用;
3、--daemon 1 是開啟后臺(tái)守護(hù)進(jìn)程,如果不添加該選擇,可以用系統(tǒng)的crontab代替。 該選項(xiàng)要和-I 10(秒)配合一起使用,即每休眠10秒監(jiān)控一次。0為關(guān)閉后臺(tái)守護(hù)進(jìn)程。
4、--mail 為開啟發(fā)送郵件報(bào)警,需先設(shè)置smtp_config.php,改成你自己的郵箱賬號(hào)信息
smtp_config.php
<?php
$content = nl2br(file_get_contents(dirname(__FILE__).'/kill.txt'));
require_once "Smtp.class.php";
//******************** 配置信息 ********************************
$smtpserver = "smtp.126.com";//SMTP服務(wù)器
$smtpserverport = 25;//SMTP服務(wù)器端口
$smtpusermail = "chunyang_he@126.com";//SMTP服務(wù)器的用戶郵箱
$smtpemailto = 'chunyang_he@126.com';//發(fā)送給誰
$smtpuser = "chunyang_he@126.com";//SMTP服務(wù)器的用戶帳號(hào),注:部分郵箱只需@前面的用戶名
$smtppass = "123456";//SMTP服務(wù)器的授權(quán)碼
$mailtitle = "警告!出現(xiàn)卡頓慢SQL,請(qǐng)及時(shí)優(yōu)化處理!";//郵件主題
$mailcontent = "<h2>".$content."</h2>";//郵件內(nèi)容
$mailtype = "HTML";//郵件格式(HTML/TXT),TXT為文本郵件
//************************ 配置信息 ****************************
?>
5、--weixin 為開啟發(fā)送微信報(bào)警,需要先安裝下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']}庫(kù)出現(xiàn)卡頓慢SQL! '{$content1}'"); 將其'hcymysql'我的微信號(hào)換成你自己的即可。
微信企業(yè)號(hào)設(shè)置 移步https://www.cnblogs.com/linuxprobe/p/5717776.html 看此教程配置。
6、會(huì)在工具目錄下生成kill.txt文件保存慢SQL。
shell> cat kill.txt
2018-11-27 16:41:22
用戶名:root
來源IP:localhost
數(shù)據(jù)庫(kù)名:hcy
執(zhí)行時(shí)間:18
SQL語句:select sleep(60)
7、默認(rèn)只殺連接中的慢SQL,保留會(huì)話連接,如果想把連接也殺掉,去掉QUERY
修改pt-kill.php
//$kill_sql = "KILL QUERY {$row['ID']}";
$kill_sql = "KILL {$row['ID']}";
具體演示請(qǐng)看“pt_kill演示錄像.avi”
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。