MongoDB数据库备份与及时、定时恢复 (3)

MongoDB数据库备份与及时、定时恢复

Step 3 结果验证

从print 出来的执行过程来看,相同的备份文件,相同的还原环境,添加--oplogLimit "1527736438:858" 参数的 replay Oplog,要小于上次不带--oplogLimit参数的全还原。

本次还原,添加 --oplogLimit,只还原了 824 KB 的oplog

2018-05-31T16:55:21.975+0800     replaying oplog

2018-05-31T16:55:22.724+0800     oplog  85.9KB

2018-05-31T16:55:25.720+0800     oplog  575KB

2018-05-31T16:55:27.231+0800     oplog  842KB

2018-05-31T16:55:27.231+0800     done

 上次,没有添加 --oplogLimit,默认全还原,所以还原了3.22MB oplog。

2018-05-31T11:23:33.770+0800     replaying oplog

2018-05-31T11:23:34.682+0800     oplog  146KB

2018-05-31T11:23:40.686+0800     oplog  1.10MB

2018-05-31T11:23:49.688+0800     oplog  2.61MB

2018-05-31T11:23:52.680+0800     oplog  3.11MB

2018-05-31T11:23:53.246+0800     oplog  3.22MB

2018-05-31T11:23:53.246+0800     done

这也容易理解。全还原一定大于指定时间的部分还原。

数据检验 :

(1)此时最大ID为"id" : 9718.0,和参数值对应的ID值连续

MongoDB数据库备份与及时、定时恢复

(2)此过程共还原数据9719,低于全还原的63862

MongoDB数据库备份与及时、定时恢复

 

本场景测试结论:

使用参数--oplogReplay –oplogLimit 可以将数据库还原到指定时刻。

 

3.3 场景三 oplog.rs 集合中导出数据进行还原

在场景2 中的 oplog.bson 是我们在mongodump 全库时,添加参数--oplog参数后自动生成的。 全库备份,受限于性能损耗和资源限制,不能高频率执行和长时间存储。考虑到副本集的oplog保存在oplog.rs集合中,此轮测试验证是否只从oplog.rs导出,就可以保证数据连续性。即从oplog.rs导出的数据是否可以替代mongodump过程中产生的oplog.bson.

类似于我们从oplog.rs集合中导出MySQL的binlog文件,也类似于SQL Server Log日志,可以实现增量备份与增量还原。

Step 1 在上述场景中继续测试,我们已经执行全库还原,只是时间点还原到"id" : 9718.0 对应的数据。

Step 2 删除 上次全备过程中产生的备份文件

MongoDB数据库备份与及时、定时恢复

Step 3 为增加试验效果,再次在源库插入部分数据

for(var i = 0; i < 10000; i++)

{ db.order0531.insert({a: i});};

 

for(i=0;i<200000;i++)

{ db.orderdetial.insert({"id":i,"name":"shenzheng","addr":"龙岗","date":new Date()}); };

step 4 将数据库local中集合oplog.rs 导出(建议导出时,增加时间参数,例如一小时内的或大于某时间时刻。注意,此处的测试场景中,我们选择的Timestamp(1527552239,1),在我们场景2中的Timestamp(1527736438, 858)的前面,故意时间重叠)

./mongodump -h 172.177.XXX.XXX --port 端口 --authenticationDatabase admin -u 用户名 -p 密码 -d local -c oplog.rs  --query '{ts:{$gte:Timestamp(1527552239,1)}}' -o /data/mongodb_back/mongotestoplog

step 5 将备份产生的文件local/oplog.rs.bson,copy至还原路径下,并将其命名为oplog.bson

cp ./mongotestoplog/local/oplog.rs.bson ./mongotestdump/oplog.bson

step 6 执行还原命令

./mongorestore -h 172.177.XXX.XXX --port 端口  --oplogReplay --authenticationDatabase admin -u 用户名 –p 密码  /data/mongodb_back/mongotestdump

step 7 数据验证

还原库

MongoDB数据库备份与及时、定时恢复

源库

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zywdzz.html