#!/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个小时