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

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

还原库

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

我们看到集合orderdetial在两个数据库不一致,有差异。即这种备份还原 无法保证数据一致性。

3.1.2 增加 参数--oplog 参数下备份还原

Step 1 删除 上次测试中遗留的集合 和 备份文件

Step 2 启动insert命令

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

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

 

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

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

 

Step 3 执行备份命令

./mongodump -h 172.177.XXX.XXX --port 端口  --oplog --authenticationDatabase admin -u 用户名 –p密码  --gzip -o /data/mongodb_back/mongotestdump

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

从打印结果来看,有对oplog命令的输出,查看备份文件 多了一个 oplog.bson 文件

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

Step 4 执行还原命令,增加参数  --oplogReplay

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

从执行情况来看,此类还原命令有还原oplog

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

Step 5 比对数据

源库

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

还原库

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

 

本场景测试结论:

虽然结果数据仍不一致,但从后者的备份还原过程可以看出,有对oplog做单独的处理。

数据可以保证以oplog结尾为准,实现了多集合(表)的时间一致性(MongoDB本身特性,不保证体现数据库的事务一致性)。

 

3.2 场景二  还原到指定时间点

 

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

 

使用场景3.1.2 的备份文件,测试还原到备份过程中的某个时刻。从上次备份过程可知,开始时间为2018-05-31T11:13:46.501+0800,结束时间为 2018-05-31T11:14:12.961+0800

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

此轮测试还原点选择在此时间段内。时间还原点的选择,假如我们还原到orderdetial 集合"_id" : ObjectId("5b0f6876c52291864d3485b9")的插入时的时间点。

查看此时间点对应的时间和操作序列,在源库local中的oplog.rs 集合查询。

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

(oplog.rs集合的数据意义,我们在其他章节介绍,在此不做赘述)

"ts" : Timestamp(1527736438, 858)

此文档对应的 "id" : 9719.0,插入时间为2018-05-31T11:13:58.721+0800 【正好,在mongodump的过程中】

 

Step 1 删除还原服务器中的还原库(上面测试遗留的数据库)

Step 2 执行还原命令,通过--oplogLimit 参数指定时间点,时间点为上一步查到的Timestamp(1527736438, 858)

./mongorestore -h 172.177.XXX.XXX --port 端口  --oplogReplay --oplogLimit "1527736438:858" --authenticationDatabase admin -u 用户名 -p 密码  /data/mongodb_back/mongotestdump

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

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