MongoDB 的备份机制分为:延迟节点备份,全量备份 + Oplog 增量
延迟节点之前在复制集演示过,全量备份的话又分为:mongodump,复制数据文件,文件系统快照
全量备份需要注意备份时间,之前日志也说过Oplog是固定大小,循环使用的



全量备份Mongodump
mongodump: 使用 mongodump 备份最灵活,但速度上也是最慢的(把数据导出,再导入); mongodump 出来的数据不能表示某个时间点,只是某个时间段(t0时间dump,t3时间结束,dump出来数据中A值可能不是最终值,所以需要Oplog增量处理;在某个时间段的操作可能同时保存在Oplog和dump,mongo恢复的时候会做幂等性处理)
![]()
![]()
mongodump
• --oplog: 复制 mongodump 开始到结束过程中的所有 oplog 并输出到结果中。 输出文件位于 dump/oplog.bson
mongorestore
• --oplogReplay: 恢复完数据文件后再重放 oplog。默认重放 dump/oplog.bson
=> <dump-directory>/local/oplog.rs.bson。如果 oplog 不在这,则可以:
• --oplogFile: 指定需要重放的 oplog 文件位置
• --oplogLimit: 重放 oplog 时截止到指定时间点
接下来简单演示下mongodump(主从演示)
1,首先在random集合中插入1000条数据
for(var i = 0; i < 1000; i++) {db.random.insertOne({x: Math.random() * 1000});}
2,打开另一个窗口2执行mongodump,dump就是写到oplog的数据
docker exec -it s1 bash
![]()
3,可以系统看到多出一个dump的目录
![]()
![]()
4,将random集合清空,再恢复
db.random.drop()
mongorestore --host 127.0.0.1 --oplogReplay dump
![]()

更多的mongodump例子也可以看https://www.cnblogs.com/tigergaonotes/p/14254845.html
接下来简单演示下cp(单机演示)
1,doker搭建mongo服务器并将/data/db目录挂载到宿主机/mongo/data,往服务器添加数据
docker run --name s1 -p 27017:27017 -v /mongo/data:/data/db -d mongo
![]()
![]()
2,cp命令将/mongo/data拷贝一份到/mongo2/data
cp -r /mongo/data/. /mongo2/data
3,此时开启服务器2,挂载到/mongo2/data,服务器2里面就包含服务器1的数据
docker run --name s2 -p 27018:27017 -v /mongo2/data:/data/db -d mongo
![]()
其他备份方法:
https://bbs.huaweicloud.com/blogs/109922
https://zhuanlan.zhihu.com/p/76372888
MongoDB的记录就先结束了,我的记录大多数知识来源于极客时间的《MongoDB高手课》,慕课网的《玩转MongoDB4.0》,MongoDB官网和MongoDB中文社区,还有各种文章搜索查看。还有很多有意思的内容,个人水平不够,看了之后不知道怎么记录。
比如意向锁的知识:https://mp.weixin.qq.com/s/aD6AySeHX8uqMlg9NgvppA?spm=a2c6h.12873639.0.0.2c58125budrSER
配合这个官网看效果更佳https://docs.mongodb.com/manual/faq/concurrency/#std-label-faq-concurrency-locking
比如后备节点读取:https://mongoing.com/archives/13473
个人记录知识点比较浅,很多感觉写的更好的文章我都贴链接,都可以看看
还有MongoDB中文社区的很多文章都挺有意思的,共同进步
网友评论