##先试下备份数据库的命令:
##备份数据库:
# 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:可以写个定时任务。