使用Python怎么对Mongodb数据定时备份(mongodb,python,开发技术)

时间:2024-04-29 20:24:32 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

1. 环境

Python:3.6.1Python IDE:pycharm系统:win7

2. 搭建FTP服务器,配置好FTP环境

2.1. 启用FTP和IIS服务器

使用Python怎么对Mongodb数据定时备份

注意:要全部展开,勾选上。

2.2. 添加FTP服务器

使用Python怎么对Mongodb数据定时备份

使用Python怎么对Mongodb数据定时备份

2.3. 设置参数

使用Python怎么对Mongodb数据定时备份

使用Python怎么对Mongodb数据定时备份

使用Python怎么对Mongodb数据定时备份

2.4. 设置成功,访问

使用Python怎么对Mongodb数据定时备份

3. 用python编写压缩文件并实现FTP上传的脚本

3.1. Import包:

#python3.6.1importzipfileimportosimportdatetimefromftplibimportFTP

3.2. 定义配置信息:

#定义配置信息srcFolder=r"F:\Data"#被压缩的源数据,文件夹形式desFolder=r'F:\MongoDbData\\'#压缩好的数据临时存放的位置ftp_url="192.168.0.101"#FTP服务器地址ftp_port=21#FTP服务端口号ftpUploadFolder="MongoDBup"#压缩数据在FTP服务器上存放的位置

3.3. 压缩数据源(文件夹):

#压缩文件夹defzipFolder(srcFolder,desFolder,date):''':paramsrcFolder:被压缩的源数据位置:paramdesFolder:压缩之后文件的存放路径:paramdate:执行压缩的当前时间,datetime产生(ext:2017-08-1614:56:40.872613):return:压缩文件的路径'''startTime=datetime.datetime.now()print(f"EnterfunczipFolder,time:{startTime}")desName=f"{desFolder}mongodb{date.year}{date.month}{date.day}.zip"#检查是否已经压缩过了ifos.path.exists(desName):endTime=datetime.datetime.now()print(f"Alreadyexsist,leavefunczipFolder,time:{endTime},usedTime:{endTime-startTime}")returndesNamez=zipfile.ZipFile(desName,'w',zipfile.ZIP_DEFLATED)fordirpath,dirnames,filenamesinos.walk(srcFolder):print(f"dirpath:{dirpath},dirnames:{dirnames},filenames:{filenames}")forfilenameinfilenames:try:#Mongodb在运行时,有几个关于lock的文件无法压缩,为了避免程序终止,忽略这几个文件z.write(os.path.join(dirpath,filename))exceptExceptionase:print(f"except:{e},cannotzipfile:{dirpath}{filename}")z.close()endTime=datetime.datetime.now()print(f"zipdone,leavefunczipFolder,time:{endTime},usedTime:{endTime-startTime}")returndesName

3.4. 文件上传到FTP服务器上:

#上传文件至FTP服务器defftpUpload(filename,folder,ftp_url,ftp_port):''':paramfilename:待上传文件路径:paramfolder:文件上传至FTP服务器上的存储目录:paramftp_url:FTP服务器IP:paramftp_port:端口号,默认为21:return:statuscode'''startTime=datetime.datetime.now()print(f"EnterfuncftpUpload,time:{startTime}")ftp=FTP()ftp.set_debuglevel(2)#setdebuglevel,detailinfo:2,close:0ftp.connect(ftp_url,ftp_port)ftp.login('','')#登录,如果匿名登录则用空串代替print(ftp.getwelcome())#ext:*welcome*'220MicrosoftFTPService'ftp.cwd(folder)#ChangetoadirectoryonFTPserverbufsize=1024#设置缓冲块大小file_handler=open(filename,'rb')#读模式在本地打开文件res=-1try:#为了避免程序终止,忽略可能出现的错误res=ftp.storbinary(f"STOR{os.path.basename(filename)}",file_handler,bufsize)#uploadfileexceptExceptionase:print(f"except:{e},cannotuploadfile:{ftp_url}:{ftp_port}{filename}")finally:ftp.set_debuglevel(0)#关闭debug信息file_handler.close()ftp.quit()endTime=datetime.datetime.now()print(f"Uploaddone,leavefuncftpUpload,time:{endTime},usedTime:{endTime-startTime}")returnres

3.5. 主程序:

#mainbackupTime=datetime.datetime.now()zip_des_name=zipFolder(srcFolder,desFolder,backupTime)print(zip_des_name)ftp_res=ftpUpload(zip_des_name,ftpUploadFolder,ftp_url,ftp_port)print(f"ftp_res:{ftp_res}")

4. 使用win7自带的任务计划程序定时执行python脚本

位置:开始 ——> 附件 ——> 系统工具 ——> 任务计划程序

使用Python怎么对Mongodb数据定时备份

使用Python怎么对Mongodb数据定时备份

使用Python怎么对Mongodb数据定时备份

使用Python怎么对Mongodb数据定时备份

使用Python怎么对Mongodb数据定时备份

使用Python怎么对Mongodb数据定时备份

使用Python怎么对Mongodb数据定时备份

使用Python怎么对Mongodb数据定时备份

不需要时,右键——>删除任务 即可

5. 效果

5.1. 本地生成的压缩文件

使用Python怎么对Mongodb数据定时备份

5.2. 上传至FTP服务器的压缩文件

使用Python怎么对Mongodb数据定时备份

5.3. 详细信息-性能-时间

日志信息:

源文件data总共8.7G,压缩后5.3G,压缩时间20m,局域网内上传时间18m。

E:\Miniconda\python.exe E:/PyCharmCode/Justtest/bak.py
Enter func zipFolder, time:2017-08-16 19:48:39.331200
dirpath:F:\Data, dirnames:['diagnostic.data', 'journal'], filenames:['collection-0--394122179086539486.wt', 'collection-102--394122179086539486.wt', 'collection-104--394122179086539486.wt', 'collection-106--394122179086539486.wt', 'collection-108--394122179086539486.wt'], '_mdb_catalog.wt']
except: [Errno 13] Permission denied: 'F:\\Data\\mongod.lock', cannot zip file: F:\Datamongod.lock
except: [Errno 13] Permission denied, cannot zip file: F:\DataWiredTiger.lock
dirpath:F:\Data\diagnostic.data, dirnames:[], filenames:['metrics.2017-08-04T07-04-29Z-00000', 'metrics.2017-08-05T10-47-22Z-00000', 'metrics.2017-08-06T14-52-22Z-00000', 'metrics.2017-08-07T18-17-22Z-00000', 'metrics.2017-08-15T06-09-26Z-00000', 'metrics.2017-08-16T09-51-29Z-00000']
dirpath:F:\Data\journal, dirnames:[], filenames:['WiredTigerLog.0000000247', 'WiredTigerPreplog.0000000006', 'WiredTigerPreplog.0000000007', 'WiredTigerPreplog.0000000008']
zip done, leave func zipFolder, time:2017-08-16 20:08:22.728200, usedTime:0:19:43.397000
F:\MongoDbData\\mongodb2017816.zip
Enter func ftpUpload, time:2017-08-16 20:08:22.728200
*get* '220 Microsoft FTP Service\n'
*resp* '220 Microsoft FTP Service'
*cmd* 'USER anonymous'
*put* 'USER anonymous\r\n'
*get* '331 Anonymous access allowed, send identity (e-mail name) as password.\n'
*resp* '331 Anonymous access allowed, send identity (e-mail name) as password.'
*cmd* 'PASS **********'
*put* 'PASS **********\r\n'
*get* '230 User logged in.\n'
*resp* '230 User logged in.'
*welcome* '220 Microsoft FTP Service'
220 Microsoft FTP Service
*cmd* 'CWD MongoDBup'
*put* 'CWD MongoDBup\r\n'
*get* '250 CWD command successful.\n'
*resp* '250 CWD command successful.'
*cmd* 'TYPE I'
*put* 'TYPE I\r\n'
*get* '200 Type set to I.\n'
*resp* '200 Type set to I.'
*cmd* 'PASV'
*put* 'PASV\r\n'
*get* '227 Entering Passive Mode (192,168,0,101,11,221).\n'
*resp* '227 Entering Passive Mode (192,168,0,101,11,221).'
*cmd* 'STOR mongodb2017816.zip'
*put* 'STOR mongodb2017816.zip\r\n'
*get* '125 Data connection already open; Transfer starting.\n'
*resp* '125 Data connection already open; Transfer starting.'
*get* '226 Transfer complete.\n'
*resp* '226 Transfer complete.'
Upload done, leave func ftpUpload, time:2017-08-16 20:26:20.125200, usedTime:0:17:57.397000
ftp_res: 226 Transfer complete.

6. 注意事项

6.1. FTP服务器IP地址变更处理

6.1.1. 第一步,修改FTP服务器站点配置。

使用Python怎么对Mongodb数据定时备份

6.1.2. 第二步,修改代码中FTP登录IP

ftp.connect("172.16.7.107",21)

6.1.3. 出错信息 如果只是单纯按照6.1.2 修改登录IP,没有修改FTP服务器站点设置的话,将会出现如下莫名其妙的错误:

enterftpUpload*get*''Traceback(mostrecentcalllast):File"AutoBackupMongoTest.py",line64,in<module>ftp_res=ftpUpload(zip_des_name,ftpUploadFolder)File"AutoBackupMongoTest.py",line42,inftpUploadftp.connect('172.16.7.107',21)File"E:\Miniconda\lib\ftplib.py",line155,inconnectself.welcome=self.getresp()File"E:\Miniconda\lib\ftplib.py",line234,ingetrespresp=self.getmultiline()File"E:\Miniconda\lib\ftplib.py",line220,ingetmultilineline=self.getline()File"E:\Miniconda\lib\ftplib.py",line208,ingetlineraiseEOFErrorEOFError

或者是如下错误:

enterftpUploadTraceback(mostrecentcalllast):File"AutoBackupMongoTest.py",line63,in<module>ftp_res=ftpUpload(zip_des_name,ftpUploadFolder)File"AutoBackupMongoTest.py",line41,inftpUploadftp.connect("192.168.0.101",21)File"E:\Miniconda\lib\ftplib.py",line152,inconnectsource_address=self.source_address)File"E:\Miniconda\lib\socket.py",line722,increate_connectionraiseerrFile"E:\Miniconda\lib\socket.py",line713,increate_connectionsock.connect(sa)TimeoutError:[WinError10060]由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:使用Python怎么对Mongodb数据定时备份的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:怎么在Android中利用seekbar实现一个可拖动的进度条功能下一篇:

11 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18