Mongodb增量备份


26

我承担了为MongoDB复制集设置增量备份的任务,当然,作为起点,我用Google搜索了它,但在MongoDB文档上找不到任何内容,但是我确实在Stack Overflow上发现了这个问题,这鼓励开发自己的解决方案因为没有发现Tayra非常活跃。

我阅读oplog并意识到,开发一些东西来重播日志非常容易,但是事实证明,我并不需mongorestore要这样做。

现在,我有了一个使用bash脚本的可行解决方案,这很容易,这就是我在这里询问我的逻辑是否有缺陷的原因,或者将来会困扰我的原因。

下面是我的实现方式:

完整备份程序

  1. 锁定写入辅助成员 db.fsyncLock()
  2. 拍摄快照
  3. 记录操作日志中的最后一个职位

    db.oplog.rs.find().sort({$natural:-1}).limit(1).next().ts
  4. 解锁写入 db.fsyncUnlock()

增量备份程序

  1. 锁定写入辅助成员
  2. 从完整(或最新增量)备份中记录的oplog位置转储oplog:

    mongodump --host <secondary> -d local -c oplog.rs -o /mnt/mongo-test_backup/1 
        --query '{ "ts" : { $gt :  Timestamp(1437725201, 50) } }'
    
  3. 记录最新操作日志位置(与完整备份相同)

  4. 解锁写入

完整备份还原过程

  1. 停止的所有实例 mongod
  2. 将快照复制到将成为主文件夹的数据目录中,但请确保排除所有快照,local*并且mongod.lock 此恢复技术称为通过破坏镜像进行重新配置
  3. 开始小学
  4. 重新配置副本集
  5. 在没有任何数据的情况下启动辅助设备,让它们执行初始同步。或从具有新local数据库的新主数据库复制数据

恢复增量备份

当我们创建增量备份时,它像这样存储它:

/mnt/mongo-test_backup/1/local/oplog.rs.bson
/mnt/mongo-test_backup/1/local/oplog.rs.metadata.json

我们已经启用了,oplog.rs.bson但是我们将不得不对其进行重命名,因此步骤如下:

  1. 将目录更改为备份: cd /mnt/mongo-test_backup/1/local
  2. 删除json文件 rm *.json
  3. 重命名bson文件 mv oplog.rs.bson oplog.bson
  4. 恢复它:

    mongorestore -h <primary> --port <port> --oplogReplay /mnt/mongo-test_backup/1/local

我已经编写了所有脚本,可以稍后在GitHub上提交。

问题是逻辑是否存在缺陷?我有点可疑,因为该过程非常简单,但仍然找不到任何地方的文档。


2
您正在使用哪个版本的Mongo?如果您使用的是wiredtiger,那么用db.fsyncLock()引用的第一项就是一个问题。MongoDB Inc声称“对于WiredTiger,带有lock选项的fsync命令不能保证数据文件不会更改。因此,请不要使用这些方法来确保创建备份的一致性。” 链接
SDillon

1
@SDillon使用3.0.4,但尚未使用WiredTiger,至少现在还没有。我决定使用它,而不是锁写,我们将不得不一起停止mongod。这是一个公平的感谢
Tiago

我发现以下用于增量备份的工具github.com/EqualExperts/Tayra希望这会有所帮助
Ahmad Abuhasna '16

1
“在版本3.2中进行了更改:带有lock选项的fsync命令可以确保使用MMAPv1或WiredTiger存储引擎的MongoDB实例的数据文件不会更改,从而为创建备份提供了一致性。”
安全的

进行增量备份的常规方法(也是绝对最简单的方法)是使用LVM和快照。docs.mongodb.com/manual/tutorial/...
JJussi

Answers:


3

回答您的问题。没有!您的逻辑没有失败,它应该可以正常工作。但是,如果可以使用LVM快照,则是进行备份的更好方法。


如何对LVM快照进行增量备份?谢谢!
TanisDLJ

LVM快照本质上是增量的。快照是及时的时刻,仅记录更改。
JJussi'9

只是快照,是的,它是增量的。但是,如果您存档快照,则是完整备份。例如,您不能像重复性一样归档其他增量备份。而且,您不能简单地每隔30分钟开始为增量备份创建快照,因为这会严重影响性能。
TanisDLJ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.