备份完成发送短信通知提醒

备份完成短信通知

背景描述

在生产环境中,120作为三个数据库的从库,在每天0点时,会对三个数据库从库进行备份操作,然而备份的结果,没有及时的通知,最近检查备份情况的时候,由于备份条件判断出错,导致相关备份没有完成,所以想写一个脚本,在备份完成的时候,触发通知,可以是短信,也可以是邮件。

备份使用的是xtrabackup工具。每周日进行全量备份,每天基于周日的全量实行差量备份。

查看zabbix时,发现有一个通用的短信发送接口,直接调用该接口,就可以发送短信了,唯一要做的就是编写短信内容。这里是通过python脚本编写,主要是使用了os.path模块和文件操作模块。

代码解释

  1. 通知短信内容描述

    这里我想通知的短信内容,是在备份完成的时候,通过对备份结果日志的查看,将相关内容获取出来,比如备份开始时间、备份结束时间、是否是增量备份,这三个字段,我就能明白当天的备份是个什么情况。而这些信息,全部存放在xtrabackup_info文件中。只要读取该文件,就能获取到想要的信息。

    cat xtrabackup_info 
    uuid = f46a2b5e-a263-11e9-b0e5-0050568df397
    name = 
    tool_name = xtrabackup
    tool_command = --defaults-file=/usr/local/mysql/mysqldata/data1/my.cnf --backup --user=root --password=... --socket=/usr/local/mysql/mysqldata/data1/mysql.sock --incremental-basedir=/usr/local/mysql/mysqldata/databak/2019-07-07/data1 --target-dir=/usr/local/mysql/mysqldata/databak/2019-07-10/data1
    tool_version = 2.4.8
    ibbackup_version = 2.4.8
    server_version = 5.7.12-log
    start_time = 2019-07-10 00:00:03
    end_time = 2019-07-10 00:09:39
    lock_time = 0
    binlog_pos = filename 'mysql-bin.000019', position '185125263'
    innodb_from_lsn = 61049503964
    innodb_to_lsn = 61345018710
    partial = N
    incremental = Y
    format = file
    compact = N
    compressed = N
    encrypted = N
    

    主要获取start_time、end_time和incremental三个字段,然后将这三个字段作为短信内容发送

  2. 目录获取

    因为备份的设置,每天将备份的结果,放在today目录中,today目录下有data1 data2 和data3三个目录,然后xtrabackup_info文件,就在这三个目录下,为了能通过代码自动执行,需要切换到这三个目录中,获取文件。由于文件名都是一样的,所以在文件操作部分,基本上可以写一样的,只要做好目录切换就可以了。

    这里通过的是os.path模块,通过listdir方法和chdir方法,根据拼接的路径,进行目录切换,然后获取到相应的文件。

    由于目标是确定的,可以直接写一个循环,来进行切换判断。

    当目录存在时,进入该目录,然后获取到文件,进行读取操作,返回短信内容,当目录不存在时,直接返回短信内容,备份不成功。

  3. 代码

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    import os
    import sendsms as sendsms
    
    #file_path='/usr/local/mysql/mysqldata/databak/today/2019-07-09/data1'
    #定义基础目录
    file_path='/usr/local/mysql/mysqldata/databak/today'
    #切换目录
    os.chdir(file_path)
    #拼接目录
    today_path=file_path + '/'+ os.listdir(file_path)[0]
    os.chdir(today_path)
    message=''
    for datadir in ['data1','data2','data3']:
        os.chdir(today_path)
        temdatadir=today_path + '/'+datadir
        if os.path.exists(temdatadir):
            os.chdir(temdatadir)
            file = open("xtrabackup_info",mode='r')
            data = file.readlines()
    
    
            for temdata in data:
                if 'start_time' in temdata:
                    start_time = temdata
                elif 'end_time' in temdata:
                    end_time = temdata
                elif 'incremental' in temdata:
                    incremental = temdata
    
            #string_format = '%s%s%s'%(start_time,end_time,incremental)
            string_format = '----------------\n' \
                        'Instance Name:%s\n' \
                            'Backup done!\n' \
                        '%s%s%s'\
                        %(datadir,start_time,end_time,incremental)
        else:
            string_format = '----------------\n' \
                            'Instance Name:%s\n' \
                            'Backup Missing!\n' \
                            % (datadir)
    
        message +=string_format
            #print(string_format)
    #print(message)
    PhoneNumber=['11111111111']
    for phoneno in PhoneNumber:
    
        sendsms.sendsms(phoneno,message)
    
  4. 测试

    将该代码写入到备份的定时任务最后,当定时任务的脚本执行的结尾,执行脚本,发送短信到对应的手机上。

     

  5. 其实可以根据不同的场景,编辑该脚本,实现各种短信通知,只要有短信接口即可。
posted @ 2019-07-10 08:46  波波波波波  阅读(302)  评论(0编辑  收藏  举报