版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/qq_24909089/article/details/83064934
思路:
1.链接阿里云rds
2.按数据库分别导出sql作为备份(以数据库名作为文件夹名,以每天日期作为文件名直接压缩为.sql.gz)
3.删除过期备份内容
分表版:https://blog.csdn.net/qq_24909089/article/details/83073077
代码示例如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Author:
# @Date : 2018/10/15
# !/usr/bin env python3
# 你需要导入这个模块
import os
import time
import datetime
"""
配置信息
"""
# 需要备份的数据库集合
db_name = ['jian','admin']
# 忽略文件(苹果笔记本易产生)
ignore = ['.DS_Store']
# 数据库链接配置
db_config = {
'host': "127.0.0.1",
'user': "root",
'pwd': "",
}
# 保留天数
save_day = 10
# 当前日期
date_time = time.strftime('%Y-%m-%d', time.localtime(time.time()))
"""
方法体
"""
def create_file(path):
"""
创建文件夹函数
:param path:创建文件路径
:return:
"""
# 去除首位空格
path = path.strip()
# 去除尾部 \ 符号
path = path.rstrip("\\")
# 判断路径是否存在
if not os.path.exists(path):
# 如果不存在则创建目录
os.makedirs(path)
return True
else:
# 如果目录存在则不创建
return False
def export_backup(address):
"""
导出数据库备份函数
:param address: 导出数据库路径
:return:
"""
# ()中的参数 "调用mysqldump -h地址 -u用户名 -p密码 需要备份的数据库名 > 生成的文件名"
os.system("mysqldump -h%s -u%s -p%s %s |gzip > %s" % (
db_config['host'], db_config['user'], db_config['pwd'], db_name[i], address))
def delete_zip(day, folder):
"""
删除文件函数
:param day: 保留天数(多少天以内)
:param folder: 指定需要检索删除的文件夹
:return:
"""
# 列出文件夹下所有的目录与文件
list = os.listdir(folder)
for i in range(0, len(list)):
path = os.path.join(folder, list[i])
if os.path.isfile(path):
files = os.path.basename(path)
if files not in ignore:
# 去除后缀
da = files.strip('.sql.gz')
# 多少天之前时间
now = datetime.datetime.now()
delta = datetime.timedelta(days=day)
n_days = now - delta
before_time = n_days.strftime('%Y-%m-%d')
# 比较大小
time1 = datetime.datetime.strptime(da, "%Y-%m-%d")
time2 = datetime.datetime.strptime(before_time, "%Y-%m-%d")
if time1 < time2:
os.remove(path)
print('删除%s天之前的备份%s' % (day, path))
"""
调用
"""
# 导出数据库备份
for i in range(len(db_name)):
# 文件夹地址
mkpath = "./%s\\" % db_name[i]
# 备份文件地址
address = "%s/%s.sql.gz" % (db_name[i], date_time)
# 创建文件夹
create_file(mkpath)
print("文件夹创建完成")
# 备份数据库
export_backup(address)
print("备份数据库已完成:%s" % address)
# 删除保留天数之外的文档
delete_zip(save_day, db_name[i])
print("删除保留天数之外文件已完成:%s" % db_name[i])
else:
print("已完成%s" % date_time)
注意:如果要挂载crontab自动命令,创建文件夹与导出路径要换成绝对路径。