python 数据库备份脚本
#!/usr/bin/python # -*- coding: UTF-8 -*- """数据库备份""" import os import time import sched import re import smtplib from email.mime.text import MIMEText from email.header import Header from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication # 第一个参数确定任务的时间,返回从某个特定的时间到现在经历的秒数 # 第二个参数以某种人为的方式衡量时间 schedule = sched.scheduler(time.time, time.sleep) new_filename = '' def backupsDB(): """备份数据""" global new_filename new_filename = time.strftime("%y-%m-%d-%H-%M-%S", time.localtime())+".sql" i_time =time.time() # 如果是linux改下路径就可以了 cmdString = 'mysqldump -u root --password=ycc962464 --all-databases > %s'%new_filename #备份语句 os.system(cmdString) work_dir = '.\\' # 遍历备份文件夹 for parent, dirnames, filenames in os.walk(work_dir, followlinks=True): for filename in filenames: file_path = os.path.join(parent, filename) t = os.path.getctime(file_path) #获取文件创建时间戳 # print('文件名:%s' % filename) # print('文件完整路径:%s' % file_path) # print(get_FileCreateTime(file_path)) if re.match("(.*?)\\w.sql",filename) and i_time-t >432000: '''当文件时间大于指定时间后(432000=5天),删除文件''' # print(i_time-t) # print('文件名', filename) os.remove(file_path) def sendMail(nber,e=""): """邮件发送""" _user = "84309201@qq.com"#发送者的邮箱 _pwd = "xumeagqowzcgbfi"#发送者的密码 _to = "84309201@qq.com"#接收者的邮箱 # 如名字所示Multipart就是分多个部分 msg = MIMEMultipart() msg["Subject"] = "数据库数据备份" msg["From"] = _user msg["To"] = _to if nber == 0 : # ---这是文字部分--- part = MIMEText("名家景选数据库备份") msg.attach(part) # ---这是附件部分--- # 类型附件 part = MIMEApplication(open(new_filename, 'rb').read()) part.add_header('Content-Disposition','attachment',filename=new_filename) msg.attach(part) else: #---错误信息--- part = MIMEText("数据库备份失败!!错误:",e) msg.attach(part) s = smtplib.SMTP("smtp.qq.com", timeout=25) # 连接smtp邮件服务器,端口默认是25,qq邮箱 s.login(_user, _pwd) # 登陆服务器 s.sendmail(_user, _to, msg.as_string()) # 发送邮件 s.close() def perform_command(cmd, inc): # 安排inc秒后再次运行自己,即周期运行 #防止报错后停止运行 try: schedule.enter(inc, 0, perform_command, (cmd, inc)) os.system(cmd) backupsDB() sendMail(0) except Exception as e : print (e) sendMail(1,e) def timming_exe(cmd, inc=60): # enter用来安排某事件的发生时间,从现在起第n秒开始启动 schedule.enter(inc, 0, perform_command, (cmd, inc)) # 持续运行,直到计划时间队列变成空为止 schedule.run() if __name__ == '__main__': # print("show time after 10 seconds:") timming_exe("echo %time%", 43200);#每间隔43200秒备份发送邮件,43200 是12个小时