Mongodb增量备份

时间:2015-07-24 08:43:29

标签: bash mongodb backup

我被赋予了为mongodb replicaset设置增量备份的任务,当然我开始搜索它并且在mongodb文档上找不到任何内容,但我确实发现这个question鼓励开发我自己的解决方案,因为没有发现Tayra非常活跃。

我读到了关于oplog的内容,并意识到开发一些东西来重放日志非常容易,但事实证明我没有像mongorestore那样为我做这件事。

现在我有了一个使用bash脚本的工作解决方案,这很简单,这就是我在这里询问我的逻辑中是否存在任何缺陷,或者将来会咬我的事情的原因。

以下我实施的方式:

完整备份程序:

  1. 锁定辅助成员db.fsyncLock()
  2. 拍摄快照
  3. 记录oplog的最后位置
  4. db.oplog.rs.find().sort({$natural:-1}).limit(1).next().ts

    1. 解锁写db.fsyncUnlock()
    2. 增量备份程序:

      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. 记录最新的oplog位置(与完整备份相同)
      4. 解锁写入
      5. 完整备份恢复程序:

        1. 停止mongod的所有实例
        2. 将快照复制到主要的框的数据目录,但请确保排除所有local*mongod.lock此恢复技术称为reconfigure by breaking mirror
        3. 开始初级
        4. 重新配置replicaset
        5. 启动没有任何数据的二级,让他们执行初始同步。或者使用新的local数据库
        6. 复制新主数据库中的数据

          恢复增量备份:

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

          /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
          5. 我把它全部编写成脚本,我可能会在github上提交它。

            问题是逻辑中是否存在任何缺陷。我有点怀疑,因为程序很直接,但我无法在任何地方找到它。

0 个答案:

没有答案