Python定时备份数据库以及邮件提醒脚本

##先试下备份数据库的命令:

##备份数据库:
# mysqldump -u user_name(用户名) -p user_passwd(-p 跟密码直接进,不用再输入密码)  data_name(数据库名)   >/mnt/data_name.sql
# mysqldump  -u user_name -p user_passwd    data_name  --no-data   ##只备份结构,不备份数据
#                                   --all-database   ##备份全部数据库
#                                   --all-database  --no-data  ##备份数据库的结构 ,不备份插入的数据

在这里插入图片描述
[root@asimov ~]#mysqldump -uroot -p密码 Movie >/mnt/MovieDump.sql
在这里插入图片描述

1.关于备份目录名和文件名:

import os
import time
date = os.popen('date +%F').read().strip()  ##这个用作备份目录名
#date=time.strftime('%Y-%m-%d')              
print(date)
#2019-07-17
a=time.strftime('%Y-%m-%d-%H:%M:%S')    ##这个用作备份文件名
print(a)
#2019-07-17-21:59:13

time模块的显示时间处理:

%y   # 两位数的年份表示(00-99)
%Y   # 四位数的年份表示(000-9999)
%m   # 月份(01-12)
%d   # 月内中的一天(0-31)
%H   # 24小时制小时数(0-23)
%I   # 12小时制小时数(01-12) 
%M   # 分钟数(00=59)
%S   # 秒(00-59)

2.代码实现:

import os
import smtplib
from email.mime.text import MIMEText

import time

from mail_config import *  ##邮件配置文件

from python脚本.database_config import *  ##数据库配置文件

数据库配置文件:
database_config.py:

user = 'root'
passwd = 'Asimov'
database_name = 'Movie'
DumpDir = '/home/kiosk/DataDump/'

数据库备份函数:

  def DataDump():
        ##在要备份的目录下创建格式化的备份目录
        mkdir_dir = DumpDir + time.strftime('%Y-%m-%d') + "/"
    
        if not os.path.exists(mkdir_dir):  # 判断如果没有当天时间目录
            os.makedirs(mkdir_dir)  # 创建目录
    
        date_filename = mkdir_dir +time.strftime('%Y-%m-%d-%H:%M:%S')+ '_'+ database_name  + '.sql'  # 定义数据库文件名变量
        dump_data = "mysqldump -u %s -p'%s' %s > %s" % (user, passwd, database_name, date_filename)  ##备份所有数据库到指定目录下
        if os.system(dump_data) == 0:  # 如果上一条执行结果等于0,表示成功
            content = time.strftime('%Y-%m-%d-%H:%M:%S') + '备份%s成功' % database_name
            print(content)
            return content
        else:  # 否则
            content = time.strftime('%Y-%m-%d-%H:%M:%S') + '备份%s失败' % database_name
            print(content)
            return content
    DataDump()

在这里插入图片描述
3.查看备份文件:

[kiosk@asimov ~/DataDump/2019-07-17]$ ls
2019-07-17-23:36:19_Movie.sql

在这里插入图片描述
4.结合邮件发送:
邮件配置文件:
mail_config.py:

smtpServer = 'smtp.163.com'  ##你所用的邮件服务器
sender = 'asimov_w@163.com'  ##发送者邮箱id
#passwd = 'asimov123'  ##发送者邮箱密码
passwd='asimov1234'    ##重新开的授权码(发送邮件报535)
receiver = '1019022410@qq.com'  ##接受者邮箱id  可 receiver =['1019022410@qq.com','1255990179@qq.com']
subject = '实时备份数据库监控sss'  ##邮件主题

发送邮件函数:

content = DataDump()  ##备份数据库完成后的content
##邮件内容
def mail_content():
    msg = MIMEText(content, 'plain', 'utf-8')  ##内容,明文,编码格式|若要发html页面,将明文plain改为'html'
    msg['From'] = sender
    # msg['To'] = receiver
    msg['To'] = "".join(receiver)  ##若要给多个用户发送 ,需要将列表连接成字符串
    msg['Subject'] = subject
    return msg
##发送邮件
def sendMail():
    try:
        smtpObj = smtplib.SMTP(smtpServer)  ##指定你的邮件服务器
        smtpObj.login(sender, passwd)  ##邮箱,授权码
        msg = mail_content()  ##内容
        smtpObj.sendmail(sender, receiver, msg.as_string())  ##发送者,接受者,将msg对象转化为string
    except  smtplib.SMTPException as  e:
        print("Error:邮件发送失败,", e)
    else:
        print("邮件发送%s成功" % (receiver))


if __name__ == '__main__':
    sendMail()

在这里插入图片描述
在这里插入图片描述
如果把数据库配置文件写在外面,结合发送邮件时报:535发送失败
1.重新弄个邮箱服务器的授权码
2.把数据库配置文件写进函数

import os
import smtplib
from email.mime.text import MIMEText

import time

from mail_config import *  ##邮件配置文件

# from python脚本.database_config import *  ##数据库配置文件

def DataDump():
    ##在要备份的目录下创建格式化的备份目录
    user = 'root'
    passwd = 'Asimov'
    database_name = 'Movie'
    DumpDir = '/home/kiosk/DataDump/'
    mkdir_dir = DumpDir + time.strftime('%Y-%m-%d') + "/"

    if not os.path.exists(mkdir_dir):  # 判断如果没有当天时间目录
        os.makedirs(mkdir_dir)  # 创建目录

    date_filename = mkdir_dir +time.strftime('%Y-%m-%d-%H:%M:%S')+ '_'+ database_name  + '.sql'  # 定义数据库文件名变量
    dump_data = "mysqldump -u %s -p'%s' %s > %s" % (user, passwd, database_name, date_filename)  ##备份所有数据库到指定目录下
    if os.system(dump_data) == 0:  # 如果上一条执行结果等于0,表示成功
        content = time.strftime('%Y-%m-%d-%H:%M') + '备份%s数据库成功' % database_name
        # print(content)
        return content
    else:  # 否则
        content = time.strftime('%Y-%m-%d-%H:%M') + '备份%s数据库失败' % database_name
       # print(content)
        return content


content = DataDump()  ##备份数据库完成后的content
##邮件发送
def mail_content():
    msg = MIMEText(content, 'plain', 'utf-8')  ##内容,明文,编码格式|若要发html页面,将明文plain改为'html'
    msg['From'] = sender
    # msg['To'] = receiver
    msg['To'] = "".join(receiver)  ##若要给多个用户发送 ,需要将列表连接成字符串
    msg['Subject'] = subject
    return msg
def sendMail():
    try:
        smtpObj = smtplib.SMTP(smtpServer)  ##指定你的邮件服务器
        smtpObj.login(sender, passwd)  ##邮箱,授权码
        msg = mail_content()  ##内容
        smtpObj.sendmail(sender, receiver, msg.as_string())  ##发送者,接受者,将msg对象转化为string
    except  smtplib.SMTPException as  e:
        print("Error:邮件发送失败,", e)
    else:
        print("邮件发送%s成功" % (receiver))


if __name__ == '__main__':
    sendMail()

PS:可以写个定时任务。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值