python检查mysql备份是否成功,并邮件提示

check_dbbak.py

#!/bin/pyithon
# -*- encoding:utf-8 -*-


import os
import datetime
import time
import sys
import MySQLdb
import socket


def insert_db(host,port,fsize,fexist,date):
        db = MySQLdb.connect(host="1",user="",passwd="",db="mysql",port=3306,charset="utf8")
        cursor = db.cursor()
        sql = "insert into LongzhuCC.dbbak_check values ('%s','%s','%s','%s','%s');" %(host,port,fsize,fexist,date)
        #print sql
        try:
                cursor.execute(sql)
                db.commit()
                #print "insert ok"
        except:
                db.rollback()
        db.close()


#get file
date = time.time()
def get_filesize(file):
        fsize = os.path.getsize(file)
        fsize = fsize/float(1024*1024)
        return round(fsize,2)


def whether_exist(file):
        fexist = os.path.exists(file)
        #print fexist
        return fexist


if __name__ == "__main__":
   #date = time.localtime()
   date = datetime.date.today()
   #print date
   date1 = datetime.datetime.now().strftime("%y%m%d")
   host = socket.gethostname()
   file = " " % date1
   #print file
   try:
        fsize = get_filesize(file)
        fexist = whether_exist(file)
        #print host,fsize,fexist,date
        insert_db(host,3306,fsize,fexist,date)
   except OSError,e:
        #print "0 \nfalse"

        insert_db(host,3306,0,'false',date)



send mail:

#!/usr/bin/python  
# -*- coding: utf-8 -*-  
import smtplib
import sys
import sys,os
import datetime
import MySQLdb
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.utils import parseaddr, formataddr


#获取备份失败主机信息
def insert_db():
hostbak=[]
Date = datetime.date.today()
        db = MySQLdb.connect(host="",user="",passwd="",db="",port=,charset="utf8")
        cursor = db.cursor()
sql  = "select host,fsize,fexist from LongzhuCC.dbbak_check where fsize <=1000 and date = '%s';" % Date 
try:
                data = cursor.execute(sql)
                info = cursor.fetchmany(data)
db.commit()
        except:
                db.rollback()
        db.close()
for host,fszie,fexist in info:
hostbak.append(host)
return hostbak


#推送报警至微信
def post_json(dbname):
        default_encoding = 'utf-8'
        if sys.getdefaultencoding() != default_encoding:
                reload(sys)
                sys.setdefaultencoding(default_encoding)
        a = {
                "touser": "",
                "toparty": "2",
                "totag": "",
                "agentid": "1",
                "msgtype": "text",
                "text": {
                        "content":"数据库备份存在异常\n请检查备份策略\n备份失败数据库:%s\n" %dbname
                },
            }
        print a
        resp = requests.post("http://192.168.10.176:9095",json=a)
        print(resp.content.decode("utf8"))


# 格式化邮件地址  
def formatAddr(s):
    name, addr = parseaddr(s)
    return formataddr((Header(name, 'utf-8').encode(), addr))


def sendMail(body):
    smtp_server = 'mail.pptv.com'
    from_mail = ''
    account = ''
    mail_pass = ''
    to_mail = ['']
    # 构造一个MIMEMultipart对象代表邮件本身  
    msg = MIMEMultipart()
    # Header对中文进行转码  
    msg['From'] = formatAddr('管理员 <%s>' % from_mail).encode()
    msg['To'] = ','.join(to_mail)
    msg['Subject'] = Header(header, 'utf-8').encode()
    msg.attach(MIMEText(body, 'html', 'utf-8'))
    try:
        s = smtplib.SMTP()
        s.connect(smtp_server, "587")
        s.login(account, mail_pass)
        s.sendmail(from_mail, to_mail, msg.as_string())  # as_string()把MIMEText对象变成str       
        s.quit()
    except smtplib.SMTPException as e:
        print "Error: %s" % e
if __name__ == "__main__":
    reload(sys)
    sys.setdefaultencoding('utf8')
    dbname = insert_db()
    header = "数据库备份失败!请检查备份策略"
    if  dbname:
body = "备份失败数据库:'%s'" % dbname

print dbname

        post_json(dbname)

sendMail(body)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值