mongodb副本集备份时需要oplog吗?

来源:互联网 发布:java 短网址生成 编辑:程序博客网 时间:2024/05/13 07:40

作为一个合格的dba((⊙o⊙)…我是菜鸟),备份应该是重中之重,就像‘兵马未动粮草先行’,完善的备份可以救你一命啊,切记,切记!                                                                 

那么mongodb副本集备份时到底需要oplog吗?

1、先看作用:

mongodump --oplog会记录备份期间对数据的修改到oplog.bson中
这样mongorestore --oplogReplay会在恢复完数据后重放该oplog.bson
文件。


2、用--oplog选项的好处:
备份时,用户还可以向服务器写入数据,因此备份过程对用户透明。
 
3、在分片集群(每个分片是一个副本集)中为什么不用--oplog?
(1)为了保证备份的数据是某一时刻的数据。
(2)因为配置服务器和分片上的数据是单独备份的,在备份时,
          用户同时写入数据的话,可能导致数据不一致:
         如:
              步骤1-全备配置服务器;(正常完成)
              步骤2-全备分片;
              步骤3-用户写入数据;(此时步骤2还在运行)

             结果:配置服务器没有记录用户写入的数据,恢复后,这些数据无法通过路由找到,即丢失数据了。

4、如何备份分片集群:

      自己写了个工具,没有用--oplog选项,而是单独备份oplog.rs集合,同时锁住了数据库(一定不要锁primary,否则此时用户无法写入数据,而且如果用户恰好在备份期间写入会导致mongodb挂起)。

     具体怎么备份,我会进行汇总,然后分享给大家吐舌头


0 0