Python 备份阿里云RDS数据库优化版

版权声明:本文为博主原创文章,未经博主允许不得转载 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自动命令,创建文件夹与导出路径要换成绝对路径。

猜你喜欢

转载自blog.csdn.net/qq_24909089/article/details/83064934