监控mysql集群_nagios监控mysql集群脚本

#!/usr/bin/python

#this is nagios plugin for check mysql replication

#

#Author lxm

#

import getopt

import sys

import MySQLdb

def usage():

print "Usage %s [-?|--help] -h|--slavehost -u|--slaveuser -p|--slavepasswd -H|--masterhost -U|--masteruser -P|--masterpasswd [--masterport] [--slaveport]"

def getMysqlConnect(host, user, passwd, port=3306):

try:

conn=MySQLdb.connect(hosthost=host,useruser=user,passwdpasswd=passwd,portport=port)

cursor=conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)

return cursor

except:

print "UNKNOWN - Can't connect %s:%s" % (host, port)

sys.exit(3)

def getMasterStatus(cursor):

try:

cursor.execute('show master status')

rs=cursor.fetchone()

cursor.close()

return rs

except:

print "UNKNOWN - Can't get master status"

sys.exit(3)

def getSlaveStatus(cursor):

try:

cursor.execute('show slave status')

rs=cursor.fetchone()

return rs

cursor.close()

except:

print "UNKNOWN - Can't get slave status"

sys.exit(3)

def do(masterhost, masteruser, masterpasswd, slavehost, slaveuser, slavepasswd, masterport=3306,slaveport=3306):

master=getMysqlConnect(masterhost, masteruser, masterpasswd, masterport)

slave=getMysqlConnect(slavehost, slaveuser,slavepasswd, slaveport)

masterrs=getMasterStatus(master)

slavers=getSlaveStatus(slave)

if(slavers['Slave_IO_Running'] != 'Yes') or (slavers['Slave_SQL_Running'] != 'Yes'):

print 'CRITICAL - Slave_IO_Running: %s\t Slave_SQL_Running:%s' % (slavers['Slave_IO_Running'], slavers['Slave_SQL_Running'])

sys.exit(2)

if(masterrs['File'] != slavers['Master_Log_File']):

print 'CRITICAL - Master binlog file is %s but slave read master log file is %s' % (masterrs['File'], slavers['Master_Log_File'])

sys.exit(2)

if(slavers['Master_Log_File'] != slavers['Relay_Master_Log_File']):

print 'WARING - Master_Log_File is %s but Relay_Master_Log_File is %s' % (slavers['Master_Log_File'], slavers['Relay_Master_Log_File'])

sys.exit(1)

if(masterrs['Position'] != slavers['Read_Master_Log_Pos']):

print 'WARING - Master binlog position is %d but slave read master log position is %d The Offset is %d' % (masterrs['Position'], slavers['Read_Master_Log_Pos'], masterrs['Position'] - slavers['Read_Master_Log_Pos'])

sys.exit(1)

if(slavers['Read_Master_Log_Pos'] != slavers['Exec_Master_Log_Pos']):

print 'WARING - Read Master Log Position is %d but Exec Master Log Position is %d The Offset is %d' % (slavers['Read_Master_Log_Pos'], slavers['Exec_Master_Log_Pos'], slavers['Read_Master_Log_Pos'] - slavers['Exec_Master_Log_Pos'])

sys.exit(1)

print "OK - mysql replication is ok"

sys.exit(0)

def main():

slavehost=slaveuser=slavepasswd=slaveport=masterhost=masteruser=masterpasswd=masterport= None

try:

opts,args=getopt.getopt(sys.argv[1:],'?h:u:p:H:U:P:',["help","slavehost=","slaveuser=","slavepasswd=",'slaveport=','masterhost=','masteruser=','masterpasswd=','masterport='])

except getopt.GetoptError:

usage()

sys.exit(3)

for o,a in opts:

if o in ('-?', '--help'):

usage()

sys.exit()

if o in ('-h', '--slavehost'):

slavehost= a

if o in ('-u', '--slaveuser'):

slaveuser= a

if o in ('-p', '--slavepasswd'):

slavepasswd= a

if o in ('-H', '--masterhost'):

masterhost= a

if o in ('-U', '--masteruser'):

masteruser= a

if o in ('-P', '--masterpasswd'):

masterpasswd= a

if o in ('--slaveport'):

slaveport= a

if o in ('--masterport'):

masterport= a

if not (slavehost and slaveuser and slavepasswd and masterhost and masteruser and masterpasswd):

usage()

sys.exit(3)

if not slaveport:

slaveport=3306

if not masterport:

masterport=3306

do(masterhost, masteruser, masterpasswd, slavehost, slaveuser, slavepasswd, masterport, slaveport)

if __name__== '__main__':

main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值