|
|
from Util.OssUtil import *
|
|
|
from Util.CommonUtil import *
|
|
|
# 备份思路:
|
|
|
# 使用Navicat备份,然后上传到OSS
|
|
|
# 参考文档:https://blog.csdn.net/weixin_56631459/article/details/133904669
|
|
|
# 备份的目录:
|
|
|
# C:\Users\Administrator\Documents\Navicat\PostgreSQL\Servers\10.10.14.71\huiya_db\public
|
|
|
|
|
|
# 遍历目录下所有nb3文件,删除30天前的文件
|
|
|
import os
|
|
|
from datetime import datetime
|
|
|
|
|
|
# PostgreSQL 配置
|
|
|
backup_dir = r'C:\Users\Administrator\Documents\Navicat\PostgreSQL\Servers\10.10.14.71\huiya_db\public'
|
|
|
|
|
|
|
|
|
def calculate_days_difference(timestamp_str):
|
|
|
# 将文件名中的时间戳字符串转换为datetime对象
|
|
|
file_datetime = datetime.strptime(timestamp_str, "%Y%m%d%H%M%S")
|
|
|
|
|
|
# 获取当前的datetime
|
|
|
current_datetime = datetime.now()
|
|
|
|
|
|
# 计算两个datetime之间的差异,并转换为天数
|
|
|
time_difference = current_datetime - file_datetime
|
|
|
days_difference = time_difference.days
|
|
|
|
|
|
return days_difference
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
auth = oss2.Auth(accessKeyId, accessKeySecret)
|
|
|
bucket = oss2.Bucket(auth, endpoint, bucketName)
|
|
|
|
|
|
paths = os.walk(backup_dir)
|
|
|
for path, dir_lst, file_lst in paths:
|
|
|
for file_name in file_lst:
|
|
|
if file_name.endswith(".nb3"):
|
|
|
timestamp_str = file_name.replace(".nb3", "")
|
|
|
days_diff = calculate_days_difference(timestamp_str)
|
|
|
# print(f"时间戳与当前时间相差 {days_diff} 天")
|
|
|
if days_diff > 30:
|
|
|
os.remove(os.path.join(path, file_name))
|
|
|
printf("发现30天前的备份文件,已删除掉:" + file_name)
|
|
|
else:
|
|
|
# 上传所有nb3文件到oss上去,如果上面已经存在,则跳过
|
|
|
prefix = 'DataBaseBackup/'
|
|
|
key = prefix + file_name
|
|
|
if not bucket.object_exists(key):
|
|
|
uploadOss(key, os.path.join(path, file_name))
|
|
|
printf(f"上传文件 {file_name} 到oss成功。")
|
|
|
else:
|
|
|
# 获取文件元信息
|
|
|
meta = bucket.head_object(key)
|
|
|
if meta.content_length != os.path.getsize(os.path.join(path, file_name)):
|
|
|
bucket.delete_object(key)
|
|
|
uploadOss(key, os.path.join(path, file_name))
|
|
|
printf(f"文件已存在,但文件大小不一致,已删除并重新上传 {file_name} 到oss成功。")
|
|
|
else:
|
|
|
printf(f"文件 {file_name} 已经存在oss上。")
|
|
|
printf("恭喜,所有备份操作成功完成!")
|