如何即時檢測mysql主從狀態,並做郵件警示?

來源:互聯網
上載者:User

標籤:command   一個   awk   類比   exce   cat   name   一段   排除   

                                                      即時檢測mysql主從狀態,並做郵件警示

 需求分析:

    當我們做完主從後,主從成功的話,Slave_IO_Running和Slave_SQL_Running兩個進程的狀態就為yes,但是在做主從同步時也不排除,會發生一些意外的情況,所以我們需要寫個指令碼來即時檢測Slave_IO_Running和Slave_SQL_Running的狀態,一旦mysql主從狀態出現了狀況,就通過郵件發送警示,然後再做維護。

 

 指令碼思路:

   定時檢測mysql主從狀態,說白的了就是通過指令碼讓系統去自我檢測主從狀態,如果是主從狀態是正常的,那就不做警示出來,但一旦發生狀態異常,就通過發送郵件給營運人員,營運人員收到警示郵件後,然後就做相關的維護處理

 

 1、郵件警示,我直接用的是Python寫的指令碼做郵件資訊發送,你也可以yum裝個sendmail包,做資訊發送,指令碼如下。

[[email protected] ~]# cd /python/send_mail.py#!/usr/bin/python#coding: utf-8import smtplibimport sysfrom email.mime.text import MIMEText_user = "847536**@qq.com"    ##這裡填寫你的郵件號_pwd  = "ilbsly******"   ##這裡填寫你郵件的密碼 ,我這裡使用的是qq郵箱(其他郵箱也可以),qq郵箱密碼是要到QQ郵箱裡面申請的,然後它會產生一個密碼的#_to   = "[email protected]"    ##這裡是發送給誰,這個一般注釋掉,在執行指令碼的時候指定發給誰就可以了def send_mail(to,subject,contain):    msg = MIMEText(contain)    msg["Subject"] = subject    msg["From"]    = _user    msg["To"]      = to    try:        s = smtplib.SMTP_SSL("smtp.qq.com", 465)        s.login(_user, _pwd)        s.sendmail(_user, to, msg.as_string())        s.quit()        with open('/tmp/zabbix.log', 'w') as f:            f.write("%s\n%s\n%s\n"%(to,subject,contain))#        print "Success!"    except smtplib.SMTPException,e:        print "Falied,%s"%eif __name__ == "__main__":    send_mail(sys.argv[1], sys.argv[2], sys.argv[3])


2、檢測指令碼編寫

   接下來,寫個檢測主從指令碼,按照我們的思路來說,首先是把Slave_IO_Running和Slave_SQL_Running的狀態擷取,然後利用if語句判斷,如果狀態為NO就通過Python指令碼來發送郵件,嚴重一點的,如果從伺服器的MySQL服務down了,我們也發送郵件警示,把整個過程執行過程,寫的時間任務裡面,這裡我們需要使用函數來實現,這個方便快捷,接下來我詳細解析。

[[email protected] ~]# cd /python/checkslave.sh #!/bin/bash   send_mail (){            ##定義一個函數,用來做整合檢測MySQL狀態內容。ip=`ifconfig eth0 | sed -n 2p | awk '{print $2}' | cut -d: -f2`   ##擷取本地的ip,我的本地網卡為eth0,使用sed、awk、cut命令擷取IP地址hostname=`hostname`      ##擷取本地的主機名稱status=(`mysql -uroot -pmichael123456  -e "show slave status\G"|grep "Running" |awk '{print $2}'`)   ##通過MySQL命令擷取Slave_IO_Running和Slave_SQL_Running的狀態,擷取出來的結果是(Yes、Yes、slave),因為有三個元素,所以我們可以使用元組來實現netstat -ntpl | grep 3306  ##查看3306是否存在,用來做檢測MySQL的狀態  if [ $? -eq 0 ];then    ##寫一個判斷語句如果netstat命令執行成功話,輸出$?是0,不存在$?輸出結果大於0     if [ "${status[0]}" == "Yes" ] || [ "${status[1]}" == "Yes" ] ;then       ##擷取元組的第零個元素數和第一個元素,使用if判斷,採用並集。            echo "主從複製成功"      else    ##做個判斷            python /python/send_mail.py "[email protected]" "$hostname:$ip-主從複製失敗" "$hostname:$ip- Slave_IO_Running 或者 Slave_SQL_Running已經為NO請儘快:做維護處理"             ##當輸出的元組的結果不為Yes,然後就執行,郵件發送警示$hostname 、$ip為擷取的參數                        sed  -i 's/^*\/10/#&/g' /etc/crontab               ##為了防止,它一直在郵件警示,我們需要用sed注釋掉,計劃任務,這個的作用就是只允許發送故障後,            #指令碼只執行一次,當然,如果你想發兩封的郵件,你也可以添加發送郵件命令兩遍。     fielse     python /python/send_mail.py "[email protected]" "$hostname:$ip-slave主機mysql服務已經關閉" "$hostname:$ip-主機已經停止運行請儘快做維護"     ##netstat輸出$?的結果不為0,發送警示。fi}$1   ##添加函數的參數,讓自己決定是否執行該函數crontab () {  cat /etc/crontab | grep "bash $0 send_mail "   ##尋找是否有計劃任務  if [ $? -eq 0 ]; then    ##做判斷,有就輸出有,沒有就寫入     echo "The port test has been written to the time task"  else     echo "*/10 * * * *  root  bash $0 send_mail " >> /etc/crontab ##定義每十分鐘,執行一次  fi   } crontab




3、執行結果

[[email protected] ~]# bash /python/checkslave.sh   #執行第一次,查看不了效果

##通過函數來執行,可以發現,已經有效果了,

[[email protected] ~]# bash /python/checkslave.sh send_mail  Warning: Using a password on the command line interface can be insecure.tcp        0      0 :::3306                 :::*                    LISTEN      27684/mysqld主從複製成功*/10 * * * *  root  bash /python/checkslave.sh send_mail The port test has been written to the time task

4、類比故障

我把slave停掉了,等了幾分鐘後,已經可以收到郵件了,結果如下:



5、總結

  感覺寫了個指令碼後,發現已經不用每隔一段時刻要自己檢測slave的狀態了。方便了很多,當然,還有別的方法,也同樣可以的做主從複製狀態監控。

  

如何即時檢測mysql主從狀態,並做郵件警示?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.