一、需求分析
朋友公司有一台ERP服务器做了定时输出备份,设置输出的目录是D:\backup\年月日 目录,其中当前日期(类似20171011)这个是服务器定时备份时自动生成并输出到这个目录。想自动备份到远程服务器,实现数据异地备份。
思路:
python每天定时检查以当前日期备份的目录是否存在,不存在自行创建当前日期目前,并删除前一天的旧目录。压缩当前备份数据目录,并通过上传到远程ftps服务器。加入任务计划每天11.30执行(自动备份在11点)。
二、代码
#cat upload.py
#coding:utf-8 import urllib,urllib2 from ftplib import FTP_TLS import os import re import sys import time import zipfile import datetime YestodayDir = (datetime.date.today() - datetime.timedelta(days=1)).strftime("%Y%m%d") file_root_dir= "D:\\backup" TodayDir = str(time.strftime("%Y%m%d",time.localtime())) TodayFileName = TodayDir + ‘.zip‘ FLAG = 1 ##压缩函数 def zip_dir(dirname,zipfilename): filelist = [] if os.path.isfile(dirname): filelist.append(dirname) else : for root, dirs, files in os.walk(dirname): for name in files: filelist.append(os.path.join(root, name)) zf = zipfile.ZipFile(zipfilename, "w", zipfile.zlib.DEFLATED) for tar in filelist: arcname = tar[len(dirname):] zf.write(tar,arcname) zf.close() #创建以当前日期的目录,并删除昨天目录 def check_bak_dir(): global FLAG os.chdir(file_root_dir) if not os.path.exists(TodayDir): print("no %s" %TodayDir) os.mkdir(TodayDir) #创建目录 FLAG = 0 #通过FLAg标志位来确定是否新创建目录 return FLAG else: pass if os.path.exists(YestodayDir): os.system("rmdir %s /Q/S" %YestodayDir) #删除昨天的备份 ###上传到服务器 def upload(filename): os.chdir(file_root_dir) ftp = FTP_TLS() ##此处填写你的ftp用户名和连接端口 ftp.connect("Your ip or domain",port) ftp.login(‘ftpuser‘, ftpuser‘) ftp.prot_p() ##服务器端存放的目录 ftp.cwd("home/back") upload_file=unicode(filename, "utf8") #windows f = open(upload_file, ‘rb‘) ftp.storbinary(‘STOR %s‘ % os.path.basename(upload_file),f) f.close() ftp.quit if __name__ == "__main__": check_bak_dir() if os.path.exists(TodayDir) and FLAG: #如果目录存在前不是新创建,压缩上传 print("Diractory is ziping ... ") zip_dir(TodayDir,TodayFileName) print("Upload bakcup ... ") upload(TodayFileName) print("Today %s upload success!" %TodayFileName) print
三、添加计划任务
开始-->控制面板 --计划任务--添加计划任务 类似如下图:
四、手动执行验证效果如下
登录ftps可以看到上传了20171011.zip压缩备份文件。
注意:此处代码为了隐私安全隐去了ftp的地址和端口及用户名和密码;另外建议使用ftp + SSL证书登录。以保障安全。
本文出自 “学无止境,学以致用” 博客,请务必保留此出处http://dyc2005.blog.51cto.com/270872/1971456
原文地址:http://dyc2005.blog.51cto.com/270872/1971456