备份完成发送短信通知提醒
备份完成短信通知
背景描述
在生产环境中,120作为三个数据库的从库,在每天0点时,会对三个数据库从库进行备份操作,然而备份的结果,没有及时的通知,最近检查备份情况的时候,由于备份条件判断出错,导致相关备份没有完成,所以想写一个脚本,在备份完成的时候,触发通知,可以是短信,也可以是邮件。
备份使用的是xtrabackup工具。每周日进行全量备份,每天基于周日的全量实行差量备份。
查看zabbix时,发现有一个通用的短信发送接口,直接调用该接口,就可以发送短信了,唯一要做的就是编写短信内容。这里是通过python脚本编写,主要是使用了os.path模块和文件操作模块。
代码解释
-
通知短信内容描述
这里我想通知的短信内容,是在备份完成的时候,通过对备份结果日志的查看,将相关内容获取出来,比如备份开始时间、备份结束时间、是否是增量备份,这三个字段,我就能明白当天的备份是个什么情况。而这些信息,全部存放在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三个字段,然后将这三个字段作为短信内容发送
-
目录获取
因为备份的设置,每天将备份的结果,放在today目录中,today目录下有data1 data2 和data3三个目录,然后xtrabackup_info文件,就在这三个目录下,为了能通过代码自动执行,需要切换到这三个目录中,获取文件。由于文件名都是一样的,所以在文件操作部分,基本上可以写一样的,只要做好目录切换就可以了。
这里通过的是os.path模块,通过listdir方法和chdir方法,根据拼接的路径,进行目录切换,然后获取到相应的文件。
由于目标是确定的,可以直接写一个循环,来进行切换判断。
当目录存在时,进入该目录,然后获取到文件,进行读取操作,返回短信内容,当目录不存在时,直接返回短信内容,备份不成功。
-
代码
#!/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)
-
测试
将该代码写入到备份的定时任务最后,当定时任务的脚本执行的结尾,执行脚本,发送短信到对应的手机上。
- 其实可以根据不同的场景,编辑该脚本,实现各种短信通知,只要有短信接口即可。