python 数据库备份脚本

摘要:
#!/ Usr/bin/python#-*-编码:UTF-8-*-“”数据库备份“”importosimportTimeimportschedimportreimportsmtplibfrom.mime.textimportMIMETextfrom.headerrimportHeaderfrom.mime.multipartiimportMIMEMultipar
#!/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个小时
    

免责声明:文章转载自《python 数据库备份脚本》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ios framework通用库的制作移植busybox构建最小根文件系统下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python爬虫03:那个叫做 Urllib 的库让我们的 python 假装是浏览器

相信你已经摸清了 浏览器各种请求的套路 也知道了怎么在手机上进行请求和返回数据的抓取 那么接下来我们就开始来使用 python 了 代码 lu 起来 那么 怎么用 python 写各种请求呢? 今天要给大家介绍的就是 Urllib 这可是 python 内置的库 有了它 我们写代码就轻松了 腰也不疼了 腿也不酸了 头发也不秃了 那么怎么使用Urll...

python读取pdf文件

pdfplumber简介 Pdfplumber是一个可以处理pdf格式信息的库。可以查找关于每个文本字符、矩阵、和行的详细信息,也可以对表格进行提取并进行可视化调试。 文档参考https://github.com/jsvine/pdfplumber pdfplumber安装 安装直接采用pip即可。命令行中输入 pip install pdfplumber...

shell与变量的声明的操作

1、给命令起别名:alias 执行下面命令后,可以使用dir代替ls –l 命令,显示目录中的文件详细信息: 还可以用一个别名表示几个命令 的结合: 2、ps:显示当前登录会话的所有活动进程: 3、更改默认shell:chsh chsh命令没有预安装,执行时,需要先联网安装。 执行chsh命令,过一会儿就会提示该命令找不到,是否要进行安装,输...

python判断字符串是否为空和null

1、使用字符串长度判断 len(s==0)则字符串为空 test1 = '' if len(test1) == 0: print('test1为空串') else: print('test非空串,test='+test1) 2、isspace判断字符串是否只由空格组成 >>> str="" >>> pr...

Python内置进制转换函数(实现16进制和ASCII转换)

在进行wireshark抓包时你会发现底端窗口报文内容左边是十六进制数字,右边是每两个十六进制转换的ASCII字符,这里使用Python代码实现一个十六进制和ASCII的转换方法。 hex() 转换一个整数对象为十六进制的字符串 >>> hex(16) '0x10' >>> hex(18) '0x12' >>...

python文件路径分隔符的详细分析

写了挺久的python,文件分隔符的掌握肯定是必须的,但是我之前写的都是不规范的文件路径分隔符,例如‘’C:User emppython.txt’,一直都没有报过错。也不知为啥,今天查阅资料才知道自己写的都是些假的python,所以就在此记录一下。 主要是需要考虑分隔符的问题:在Windows系统下的分隔符是: (反斜杠)。 在Linux系统下的分隔符是:...