一、开启oplog
需要 mongod --master (3.2以后主从不推荐了)
或者 mongod --replSet rs0 (开启复制集)
才会有 oplog产生,上面2个也可以通过配置文件达到目的
oplog 是全局的,记录的所有所有db的操作
二、备份实践
开启2个客户端。
一个执行循环插入:
for(var i = 0; i <100000; i ++){ db.sessions.insert({a:i}); }
另一个执行dump操作:
sudo mongodump --db test --out /usr/local/mongobak
开启 --oplog 不能指定特定数据库,而是所有库都备份。可以看到有本分的数据库test 和 oplog.bson 文件。
bsondump sessions.bson 查看,我们的a是循环自增的,所有根据最后一条,可以看出备份文件中备份了 75577+1条数据。(插入循环是从0开始,所以是 75578条)
bsondump oplog.bson 查看 oplog中的内容是从 75502 到 76623 共1121条记录。
三、还原实践
先把sessions 表里面的数据清除。
执行 mongorestore mongobak/ 可以看出恢复了 75578条数据。
再把sessions 表里面的数据清除, 重新恢复 一次这一次加上 --oplogReplay 参数。
恢复了 76624条记录。 为备份执行结束时 数据库的所有记录。 另外2万多条记录是 dump程序结束后 插入的。 所以在 dump 文件中没有的。
四、指定oplog时间恢复
再把sessions 表里面的数据清除, 重新恢复 一次这一次加上 --oplogLimit 参数,时间选择上面标红的时间。
理论上会恢复到 {“a“:76621} 这条记录为止。后面的2条不会恢复。
如图,完全符合预期。
参考:http://www.cnblogs.com/yaoxing/p/mongodb-backup-rules.html