设为首页 收藏本站
查看: 1206|回复: 0

[经验分享] python监控数据主从复制的脚本

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-8-5 09:27:28 | 显示全部楼层 |阅读模式
#!/usr/bin/python
#-*- coding: UTF-8 -*-
#
#因登录权限问题,更改IP登录的方式,改为sock识别不同的数据库实例
#
import os
import  MySQLdb
from email import encoders
from email.header import Header
from email.mime.text import  MIMEText
from email.utils import parseaddr,formataddr
import smtplib

#check module
def check_status(socket,username,password,portnum):
        try:
                conn = MySQLdb.connect( host='localhost',user=username,passwd=password,port=portnum,unix_socket=socket)
                cursor = conn.cursor(MySQLdb.cursors.DictCursor)
                cursor.execute('show slave status;')
                res = cursor.fetchall()
                iostats=res[0].get('Slave_IO_Running')
                sqlstats=res[0].get('Slave_SQL_Running')
                last_error=res[0].get('Last_SQL_Error')
                rp = open('report.txt','w')
                if iostats != 'Yes':
                        rp.write('iostat:'+iostat+'\n')
                if sqlstats != 'Yes':
                        rp.write('sqlstat:'+sqlstat+'\n')
#               print iostats,sqlstats,last_error
                rp.close()
                cursor.close()
                conn.close()
        except MySQLdb.Error,e:
                print "Mysql Error %d: %s" %(e.args[0],e.args[1])


#
#mail module
def mailto(title,t):

#发送邮件函数,从文件t中读取内容,并发送给管理员

        def _format_addr(s):
                #格式化邮件信息头
                name,addr = parseaddr(s)
                return  formataddr((Header(name,'utf-8').encode(),addr))
        from_addr = '*********@126.com'
        password = '***********'
        to_addr = '*******@qq.com'
        smtp_server = 'smtp.126.com'
        msg = MIMEText(_text=open(t,'r').read(),_subtype='plain' ,_charset='utf-8')
        msg['From'] = _format_addr('数据库状态监控<%s>' % from_addr)
        msg['To'] = to_addr
        msg['Subject'] = Header(title ,'utf-8'.encode())
        try:
                server = smtplib.SMTP(smtp_server,25)
                server.starttls()
                server.set_debuglevel(0)
                server.login(from_addr,password)
                server.sendmail(from_addr,[to_addr],msg.as_string())
                server.quit()
                return True
        except Exception,e:
                print str(e)
                return False

if __name__=='__main__':

        try:
                check_status('/home/data/mysql3309/mysql.sock','root','************',3309)
                er = os.path.getsize('./report.txt')
                if er != 0:
                        mailto('Slave-Status Of 192.168.1.204:3309','./report.txt')
        except Exception,e:
                print str(e)
#               with open('./report.txt','w') as f:
#                       f.write(str(e))
#                       mailto('check_error','./report.txt')



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-253118-1-1.html 上篇帖子: python3.5.0+ipython-5.0.0安装时遇到的问题 下篇帖子: python 爬虫爬取几十家门店在美团外卖上的排名 python 监控
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表