我的任务是为 MongoDB 副本集设置增量备份,作为起点,当然,我用谷歌搜索它并在 MongoDB 文档上找不到任何内容,但我确实在 Stack Overflow 上找到了这个问题,这鼓励开发我自己的解决方案因为没有发现 Tayra 很活跃。
我阅读oplog并意识到开发一些东西来重播日志非常容易,但事实证明我没有必要像mongorestore我那样这样做。
现在我有了一个使用 bash 脚本的有效解决方案,而且非常简单,这就是我在这里询问我的逻辑是否有任何缺陷的原因,或者将来可能会咬我的东西。
下面我是如何实现的:
锁定在次要成员上写入 db.fsyncLock()
拍摄快照
记录 oplog 的最后一个位置
db.oplog.rs.find().sort({$natural:-1}).limit(1).next().ts
Run Code Online (Sandbox Code Playgroud)
解锁写入 db.fsyncUnlock()
锁定在次要成员上写入
在完整(或最新的增量)备份上从记录的 oplog 位置转储 oplog:
mongodump --host <secondary> -d local -c oplog.rs -o /mnt/mongo-test_backup/1
--query '{ "ts" : { $gt : Timestamp(1437725201, 50) } }'
Run Code Online (Sandbox Code Playgroud)
记录最新的 oplog 位置(与完整备份相同)
解锁写入
mongodlocal*,mongod.lock 这种还原技术称为通过破坏镜像重新配置local数据库从新主数据库复制数据当我们创建增量备份时,它的存储方式如下:
/mnt/mongo-test_backup/1/local/oplog.rs.bson
/mnt/mongo-test_backup/1/local/oplog.rs.metadata.json
Run Code Online (Sandbox Code Playgroud)
我们被插入 …