First, demand analysis
Friends Company has an ERP server to do a timed output backup, set the output directory is D:\backup\ month Day directory, where the current date (similar to 20171011) This is the server scheduled backup automatically generated and output to this directory. You want to automatically back up to a remote server for data offsite backup.
Ideas:
Python periodically checks for the existence of a directory backed up with the current date every day, does not exist to create the current date itself, and deletes the old directory from the previous. Compress the current backup data directory and upload it to the remote FTPS server. Join task Schedule 11.30 per day (automatic backup at 11 points).
Second, the Code
#cat upload.py
#coding:utf-8import urllib,urllib2from ftplib import ftp_tlsimport osimport reimport sysimport timeimport zipfileimport datetimeyestodaydir = ( 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: &nBsp; 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 () #创建以当前日期的目录, and remove yesterday Catalog 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 () ## Fill in your FTP username and connection port 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.quitif __name__ == "__main__": check_bak_dir () if os.path.exists (TodayDir) and FLAG: #如果目录存在前不是新创建, compressing uploads print ("diractory is ziping ... ") zip _dir (Todaydir,todayfilename) print ("UPLOAD BAKCUP  ..... ") upload (todayfilename) print ("today %s upload success!" %todayfilename) print
Iii. Adding a scheduled task
Start-to-control panel-Scheduled Tasks-Add a scheduled task like this:
650) this.width=650; "title=" Qq20171011155044.png "alt=" Wkiom1neoecx53laaag8lwv1hym639.png "src=" https:// S5.51cto.com/wyfs02/m01/08/3a/wkiom1neoecx53laaag8lwv1hym639.png "/>
Iv. Manual execution of the verification results as follows
650) this.width=650; "title=" 55.png "alt=" Wkiol1ndy26iiblzaagleh-k2vw348.png "src=" https://s4.51cto.com/wyfs02/M01 /a6/ed/wkiol1ndy26iiblzaagleh-k2vw348.png "/>
Login FTPs to see the uploaded 20171011.zip compressed backup file.
Note: The code here for privacy security to remove the FTP address and port and user name and password, it is also recommended to use FTP + SSL certificate login. To ensure safety.
This article is from the "Learning, learning" blog, please be sure to keep this source http://dyc2005.blog.51cto.com/270872/1971456
Remote backup of enterprise data via Python+ftps