溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Percona PT-kill重構(gòu)版(PHP)

發(fā)布時(shí)間:2020-07-22 07:49:07 來源:網(wǎng)絡(luò) 閱讀:535 作者:hcymysql 欄目:MySQL數(shù)據(jù)庫(kù)


/**

  • 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”




向AI問一下細(xì)節(jié)

免責(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)容。

AI