在前言之前,我写了一篇个人博客。整体的技术栈是:Vue+node+mongo。我之前只是个菜鸟。什么都不懂,没有设置权限,没有修改端口,没有限制远程登录主机。。。。突然有一天,我发现所有的数据都没有了(hacked):后来小白不断壮大,找到了jenkins+docker实现自动化构建部署。其中mongo是我部署到docker容器中的。现在有问题,我觉得定期备份数据,以备不时之需。什么是人工备份?手动备份就是手动备份mongo容器中的数据。流程:进入mongo容器,备份数据,将mongo容器的数据复制到宿主机1.mongo容器在备份数据中找到正在运行的mongo容器,这里是3dcf2168ed94dockerimages进入mongo容器dockerexec-it3dcf2168ed94sh我们新建一个备份目录,假设是/root/blog执行mongodump命令将整个博客数据库导出到当前目录#ExportblogDatabasetothecurrentdirectorymongodump-hlocalhost:27017-dblog-o./you可以看到容器数据已经备份成功,我们退出,回到宿主机exit2。将容器数据复制到宿主机,执行命令:#copy3dcf2168ed94/root/bloginthecontainer=>当前目录(宿主机)dockercp3dcf2168ed94:/root/blog./完美,数据备份成功,每次自动备份太费力了,偷懒想了个办法1.自动挂载docker容器中的目录其实可以自动挂载到宿主机#docker-compose.yml#/root/blog-backend/data主机映射到容器blog-backend/data:/data/db2中的/data/db/root/。定时任务备份数据我这里做的是定时任务每天执行一个函数。该功能的作用是将数据备份到某个目录,然后该目录会自动映射到宿主机,形成一个闭环。我这里用eggjg,每天备份一次。#/app/schedule/backup.tsexport默认类BackUpextendsSubscription{staticgetschedule(){return{interval:'1d',#每天备份一次type:'all',};}asyncsubscribe(){try{//备份数据}catch(e){console.log(e);this.ctx.logger.error(`${newDate()}:备份数据失败`);}}}完美,终于可以愉快的钓鱼了~.~我的博客END
