python監控mysql主從指令碼

orclwujian發表於2016-12-09
閒來無事寫了個python監控mysql主從的指令碼,算是記錄學習python階段性的一個實戰吧!

#coding=utf-8
import MySQLdb
import smtplib
from email.mime.text import MIMEText

#定義一個發郵件函式
def mail(sub,content):
    mailto_list=["hzwuj@tairanchina.com"]
    mail_host="smtp.tairanchina.com"
    mail_uer="trcloud@tairanchina.com"
    mail_pass="123456"
    message = MIMEText(content,_charset='utf-8')
    message['Subject'] = sub
    message['From']=mail_uer
    message['To'] = ";".join(mailto_list)
    try:
        s = smtplib.SMTP()
        s.connect(mail_host)
        s.login(mail_uer,mail_pass)
        s.sendmail(mail_uer, mailto_list, message.as_string())
        s.close()
        return True
    except Exception:
        print 'filed'
        return False

#連線mysql資料庫
conn=MySQLdb.connect(host='172.30.249.57',port=3306,user='root',passwd='Welcome1>')
cursor1=conn.cursor()
cursor1.execute("show slave status")
rows=cursor1.fetchall()

#獲取主從同步資訊
try:
    for list in rows:
        Master_Host=list[1]
        Master_Log_File=list[5]
        Read_Master_Log_Pos=list[6]
        Relay_Master_Log_File=list[9]
        Exec_Master_Log_Pos=list[21]
        Slave_IO_Running=list[10]
        Slave_SQL_Running=list[11]
        Seconds_Behind_Master=list[32]
        Last_IO_Errno=list[34]
        Last_IO_Error=list[35]
        Last_SQL_Errno=list[36]
        Last_SQL_Error=list[37]
#判斷主從複製資訊,對出現異常的資訊發郵件告警
        if Slave_IO_Running=='No' or Slave_SQL_Running=='No' :
            mail('主從故障',"Master_Host:'%s' Last_IO_Errno:'%s' Last_IO_Error:'%s' Last_SQL_Errno:'%s' Last_SQL_Error:'%s'"  %(Master_Host,Last_IO_Errno,Last_IO_Error,Last_SQL_Errno,Last_SQL_Error))
        elif Seconds_Behind_Master>600:
            mail('主從延遲',"Master_Host:'%s' Master_Log_File:'%s' Read_Master_Log_Pos:'%s' Relay_Master_Log_File:'%s'"
                        " Exec_Master_Log_Pos:'%s' Seconds_Behind_Master:'%s'" %(Master_Host,Master_Log_File,Read_Master_Log_Pos,Relay_Master_Log_File,Exec_Master_Log_Pos,Seconds_Behind_Master))
        else:
            print '從庫正常'
except:
    mail('連線異常','連線不上資料庫')


注:Seconds_Behind_Master是理論上顯示了備庫的延遲,但由於某些原因,並不總是準確的值。這裡暫且用這個列資料!

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

相關文章