mongobackup工具恢复实测

前序:

mongobackup是开源的一个备份恢复小工具,为了测试其功能性,故进行如下测试

注:使用mongobackup是需要在replica set架构下使用,因为其备份的是oplog数据,单实例是不产生oplog

 

格式:

mongobackup手册及mongobackup下载地址

http://dl.nosqldb.org/mongobackup

http://dl.nosqldb.org/mongobackup_user_guide_zh_CN.pdf

简介

mongobackup 是用于复制集的增量备份与恢复工具,恢复时,需要结合全量备份与恢复使用。

增量备份

普通备份

  1. mongobackup -u ccj-p'123'--port27020 -h10.0.4.91--backup 

 

流模式备份

  1. mongobackup -u ccj-p'123'--port27020h10.0.4.91--backup--stream 

 

都可以指定备份初始时间点

  1. mongobackup -u ccj-p'123'--port27020 -h10.0.4.91--backup-s1385367056,1 

 

增量恢复

必须指定起止时间点,配合全备,可以恢复到任意时间点(结束时间点),开始时间点可以理解为全备的时间点。

  1. mongobackup -u ccj-p'123'--port27020-h10.0.4.91--recovery  -s1385367098,27350 -1385367132,35490 ./backup/

 

 

步骤:

备份过程

1、当前库数据信息:

trs1:PRIMARY> db.tt.find()

{ "_id" : ObjectId("5833ba3d4fde31eb3ab33310"),"b" : 1 }

 

2、使用mongodump进行全库备份:

$ /apps/mongo/bin/mongodump --host 10.25.161.15 --port 28018  -o /data/backups/

 

3、此时查看当前库的optime时间戳(后续就明白作用了)

trs1:PRIMARY> rs.status()

{

…….

   "optime" : {

                "ts" :Timestamp(1479786194, 1),

                 "t" :NumberLong(3)

               }

…….}

 

4、向tt集合中插入一条数据

trs1:PRIMARY> db.tt.insert({b:2})

WriteResult({ "nInserted" : 1 })

 

5、此时查看当前库optime时间戳(方法参考第③步)

Timestamp(1479786470, 1)

 

6、模仿误操作,删除tt集合中一条记录

trs1:PRIMARY> db.tt.remove({b:1})

WriteResult({ "nRemoved" : 1 })

 

7、使用mongbackup做增量备份(即备份从第②步全库备份之后的oplog操作记录)

[mongo@localhost backups]$ mongobackup -h 10.25.161.15 --port 28018--backup -s 1479786194,1

connected to: 10.25.161.15:28018

Tue Nov 22 11:53:44.443        local.oplog.rs to backup/oplog.bson

Tue Nov 22 11:53:46.315                 2 objects

 

恢复过程

此时我们需要恢复误删除的数据,也就是恢复到第⑤步的时间点

8、使用mongorestore工具恢复数据库到全库备份时的状态(即第②步)

[mongo@localhost backups]$ mongorestore --host 10.25.161.15:28018--drop

2016-11-22T12:09:17.570+0800    using default 'dump' directory

2016-11-22T12:09:17.570+0800    building a list of dbs and collections torestore from dump dir

2016-11-22T12:09:17.573+0800    reading metadata for test.tt fromdump/test/tt.metadata.json

2016-11-22T12:09:17.587+0800    restoring test.tt from dump/test/tt.bson

2016-11-22T12:09:17.605+0800    restoring indexes for collection test.ttfrom metadata

2016-11-22T12:09:17.606+0800    finished restoring test.tt (1 document)

2016-11-22T12:09:17.606+0800    done

注:使用--drop参数是删除原集合

 

9、此时tt集合中的数据:

trs1:PRIMARY> db.tt.find()

{ "_id" : ObjectId("5833c3d24fde31eb3ab33312"),"b" : 1 }

 

10、使用mongobackup恢复全库备份之后,删除之前添加的数据(即恢复到第⑥步之前)

[mongo@localhost backups]$ mongobackup -h 10.25.161.15 --port 28018--recovery -s 1479786194,1 -t 1479786470,1

connectedto: 10.25.161.15:28018

TueNov 22 12:12:58.158 Replaying file oplog.bson

TueNov 22 12:12:58.158 Only applying oplog entries matching this criteria: {"ts" : { "$gte" : { "$timestamp" : {"t" : 1479786194, "i" : 1 } }, "$lte" : {"$timestamp" : { "t" : 1479786470, "i" : 1 } } }}

2objects found

TueNov 22 12:12:58.159 Successfully Recovered.

 

11、此时查看tt集合数据:

trs1:PRIMARY> db.tt.find()

{"_id" : ObjectId("5833c3d24fde31eb3ab33312"), "b": 1 }

{"_id" : ObjectId("5833c44d4fde31eb3ab33313"), "b": 2 }

发现已经恢复回来

 

结论:

实测结果证明mongobackup工具是可以实现数据恢复已经增量备份功能的,不过此实验中是预先知道了timestamp时间戳,如何在实战中根据时间来恢复,这个还需要我后续进行研究测试。

如果想进行了一次全库备份(mongodump)之后,想实施增量备份,则可以使用mongobackup的流模式备份

mongobackup -h 10.25.161.15 --port 28018 --backup   --stream

你可能感兴趣的:(MongoDB)