MYSQL自動傳送慢SQL給開發人員的指令碼

czxin788發表於2017-03-21
MYSQL自動傳送慢SQL給開發人員的指令碼

          最近,我寫了個指令碼,就是當mysql資料庫cpu平均5分鐘負載高於18時,自動分析最近5分鐘內的慢sql,並把慢sql傳送給相應開發人員進行最佳化。
         同時用pt-kill命令執行超過5分鐘的慢sql,以使mysql資料庫故障自愈

[root@MySQL02 ~]# cat /usr/local/script/send_slow_sql.sh 

點選(此處)摺疊或開啟

  1. #!/bin/bash
  2. top5=`uptime |awk '{print $12}' |awk -F',' '{print $1}' |awk -F'.' '{print $1}'`
  3. if [ $top5 -gt 18 ];then
  4. echo -e "大家好: \n 在最近5分鐘內,mysql資料庫(172.16.2.4)的cpu平均負載是:`uptime |awk -F'users,' '{print $2}'`\n 是由以下慢sql引起的,煩請大家找到各自負責的慢sql進行最佳化,謝謝。" > /log/slow/report.txt
  5. #echo -e "\n 說明:以下內容是由pt-query-digest分析慢日誌得到的,如果你對以下內容有疑問,可以訪問:http://blog.csdn.net/seteor/article/details/24017913進行參考。" >> /log/slow/report.txt
  6. echo -e "\n 說明:以下內容是由pt-query-digest工具分析慢日誌得到的,如果你對以下內容有疑問,可以百度pt-query-digest進行報告解讀。" >> /log/slow/report.txt
  7. echo -e "\n 另外,此郵件是監控指令碼自動觸發傳送,請勿回覆本郵件,謝謝!" >> /log/slow/report.txt
  8. pt-query-digest --since=5m /log/slow/slow-query.log >> /log/slow/report.txt
  9. cat /log/slow/report.txt | mail -s "最近5分鐘mysql資料庫發生了慢sql" chenzhixin@abc.com zhangqiang@abc.com
  10. #用pt-kill命令殺執行超過5分鐘的慢sql,pt-kill名字在後臺執行3分鐘後自動退出,這樣做的目的是為了讓mysql故障自愈
    pt-kill --no-version-check --host=localhost --user=root --password='hy_QWSA_root' --port=3306 --daemonize --log=/log/killed_query.log --run-time=180s --busy-time=300s --idle-time=5s --match-command=Query --victims all --kill


         然後把上面的send_slow_sql.sh放到crontab每分鐘自動呼叫一次即可。
        [root@MySQL02 ~]# crontab -l
        #傳送慢sql給相應人員
        * * * * * /usr/local/script/send_slow_sql.sh

        最終得到如下郵件:

        

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28916011/viewspace-2135707/,如需轉載,請註明出處,否則將追究法律責任。

相關文章