一、写入数据

dba:PRIMARY> use backup
switched to db backup
dba:PRIMARY> db.backup.insertOne({"id":1})
{
	"acknowledged" : true,
	"insertedId" : ObjectId("5efa9451926f85541730a41e")
}
dba:PRIMARY> db.backup.insertOne({"id":2})
{
	"acknowledged" : true,
	"insertedId" : ObjectId("5efa9451926f85541730a41f")
}
dba:PRIMARY> db.backup.insertOne({"id":3})
{
	"acknowledged" : true,
	"insertedId" : ObjectId("5efa9452926f85541730a420")
}
dba:PRIMARY> db.backup.find()
{ "_id" : ObjectId("5efa9451926f85541730a41e"), "id" : 1 }
{ "_id" : ObjectId("5efa9451926f85541730a41f"), "id" : 2 }
{ "_id" : ObjectId("5efa9452926f85541730a420"), "id" : 3 }

二、当天晚上全备

[root@db1 ~]# mongodump --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -o mongo_backup
2020-06-30T09:25:26.942+0800	writing admin.system.version to 
2020-06-30T09:25:26.944+0800	done dumping admin.system.version (1 document)
2020-06-30T09:25:26.944+0800	writing world.city to 
2020-06-30T09:25:26.944+0800	writing test.inventory to 
2020-06-30T09:25:26.944+0800	writing backup.backup to 
2020-06-30T09:25:26.960+0800	done dumping backup.backup (3 documents)
2020-06-30T09:25:26.979+0800	done dumping test.inventory (6 documents)
2020-06-30T09:25:27.075+0800	done dumping world.city (4079 documents)
[root@db1 ~]# tree mongo_backup/
mongo_backup/
|-- admin
|   |-- system.version.bson
|   `-- system.version.metadata.json
|-- backup
|   |-- backup.bson
|   `-- backup.metadata.json
|-- test
|   |-- inventory.bson
|   `-- inventory.metadata.json
`-- world
    |-- city.bson
    `-- city.metadata.json

4 directories, 8 files

三、第二天又有新的数据写入

dba:PRIMARY> db.backup.insertOne({"id":4})
{
	"acknowledged" : true,
	"insertedId" : ObjectId("5efa9510926f85541730a421")
}
dba:PRIMARY> db.backup.insertOne({"id":5})
{
	"acknowledged" : true,
	"insertedId" : ObjectId("5efa9510926f85541730a422")
}
dba:PRIMARY> db.backup.insertOne({"id":6})
{
	"acknowledged" : true,
	"insertedId" : ObjectId("5efa9511926f85541730a423")
}
dba:PRIMARY> db.backup.find()
{ "_id" : ObjectId("5efa9451926f85541730a41e"), "id" : 1 }
{ "_id" : ObjectId("5efa9451926f85541730a41f"), "id" : 2 }
{ "_id" : ObjectId("5efa9452926f85541730a420"), "id" : 3 }
{ "_id" : ObjectId("5efa9510926f85541730a421"), "id" : 4 }
{ "_id" : ObjectId("5efa9510926f85541730a422"), "id" : 5 }
{ "_id" : ObjectId("5efa9511926f85541730a423"), "id" : 6 }

四、发生误删库操作

dba:PRIMARY> use backup
switched to db backup
dba:PRIMARY> db.dropDatabase()
{
	"dropped" : "backup",
	"ok" : 1,
	"operationTime" : Timestamp(1593480561, 1),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1593480561, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}
dba:PRIMARY> show dbs
admin   0.000GB
config  0.000GB
local   0.001GB
test    0.000GB
world   0.000GB

五、备份rplog到local目录中

[root@db1 ~]# mongodump --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -d local -c oplog.rs -o mongo_backup
2020-06-30T09:43:27.137+0800	writing local.oplog.rs to 
2020-06-30T09:43:27.167+0800	done dumping local.oplog.rs (6740 documents)
[root@db1 ~]# cd mongo_backup/
[root@db1 mongo_backup]# tree 
.
|-- admin
|   |-- system.version.bson
|   `-- system.version.metadata.json
|-- backup
|   |-- backup.bson
|   `-- backup.metadata.json
|-- local
|   |-- oplog.rs.bson
|   `-- oplog.rs.metadata.json
|-- test
|   |-- inventory.bson
|   `-- inventory.metadata.json
`-- world
    |-- city.bson
    `-- city.metadata.json

5 directories, 10 files

六、将rplog文件重命名并删除local目录

[root@db1 mongo_backup]# ls
admin  backup  local  test  world
[root@db1 local]# cp oplog.rs.bson oplog.bson
[root@db1 local]# mv oplog.bson ../
[root@db1 mongo_backup]# rm -rf local/

七、进入mongodb中找到drop的时间戳

dba:PRIMARY> db.oplog.rs.find({"ns" : "backup.$cmd"}).pretty()
{
	"ts" : Timestamp(1593480273, 1),
	"t" : NumberLong(6),
	"h" : NumberLong("-919752011646275684"),
	"v" : 2,
	"op" : "c",
	"ns" : "backup.$cmd",
	"ui" : UUID("82a2adbd-79c3-41d3-8e93-869c49d0b29b"),
	"wall" : ISODate("2020-06-30T01:24:33.474Z"),
	"o" : {
		"create" : "backup",
		"idIndex" : {
			"v" : 2,
			"key" : {
				"_id" : 1
			},
			"name" : "_id_",
			"ns" : "backup.backup"
		}
	}
}
{
	"ts" : Timestamp(1593480560, 1),  #发生删除集合的时间戳
	"t" : NumberLong(6),
	"h" : NumberLong("-1099825447722612621"),
	"v" : 2,
	"op" : "c",
	"ns" : "backup.$cmd",
	"ui" : UUID("82a2adbd-79c3-41d3-8e93-869c49d0b29b"),
	"wall" : ISODate("2020-06-30T01:29:20.997Z"),
	"o" : {
		"drop" : "backup"
	}
}
{
	"ts" : Timestamp(1593480561, 1),
	"t" : NumberLong(6),
	"h" : NumberLong("5755535070554655658"),
	"v" : 2,
	"op" : "c",
	"ns" : "backup.$cmd",
	"wall" : ISODate("2020-06-30T01:29:21.030Z"),
	"o" : {
		"dropDatabase" : 1
	}
}

八、回放rplog恢复数据

[root@db1 ~]# mongorestore --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" --oplogReplay --oplogLimit=1593480560 mongo_backup --drop
2020-06-30T10:19:09.156+0800	preparing collections to restore from
2020-06-30T10:19:09.163+0800	reading metadata for world.city from mongo_backup/world/city.metadata.json
2020-06-30T10:19:09.187+0800	reading metadata for test.inventory from mongo_backup/test/inventory.metadata.json
2020-06-30T10:19:09.189+0800	reading metadata for backup.backup from mongo_backup/backup/backup.metadata.json
2020-06-30T10:19:09.195+0800	restoring world.city from mongo_backup/world/city.bson
2020-06-30T10:19:09.264+0800	restoring test.inventory from mongo_backup/test/inventory.bson
2020-06-30T10:19:09.326+0800	restoring backup.backup from mongo_backup/backup/backup.bson
2020-06-30T10:19:09.380+0800	no indexes to restore
2020-06-30T10:19:09.380+0800	finished restoring test.inventory (6 documents)
2020-06-30T10:19:09.390+0800	no indexes to restore
2020-06-30T10:19:09.390+0800	finished restoring backup.backup (3 documents)
2020-06-30T10:19:09.592+0800	no indexes to restore
2020-06-30T10:19:09.592+0800	finished restoring world.city (4079 documents)
2020-06-30T10:19:09.592+0800	replaying oplog
2020-06-30T10:19:12.152+0800	oplog  850KB
2020-06-30T10:19:12.440+0800	oplog  917KB
2020-06-30T10:19:12.440+0800	done

rplog恢复先从全备中恢复,再从rplog中恢复全备里没有的数据

九、验证数据完整性

dba:PRIMARY> use backup
switched to db backup
dba:PRIMARY> db.backup.find()
{ "_id" : ObjectId("5efa9451926f85541730a41e"), "id" : 1 }
{ "_id" : ObjectId("5efa9451926f85541730a41f"), "id" : 2 }
{ "_id" : ObjectId("5efa9452926f85541730a420"), "id" : 3 }
{ "_id" : ObjectId("5efa9510926f85541730a421"), "id" : 4 }
{ "_id" : ObjectId("5efa9510926f85541730a422"), "id" : 5 }
{ "_id" : ObjectId("5efa9511926f85541730a423"), "id" : 6 }

十、查看rplog的参数信息

dba:PRIMARY> rs.printReplicationInfo()
configured oplog size:   1024MB
log length start to end: 66384secs (18.44hrs)
oplog first event time:  Mon Jun 29 2020 16:22:41 GMT+0800 (CST)
oplog last event time:   Tue Jun 30 2020 10:49:05 GMT+0800 (CST)
now:                     Tue Jun 30 2020 10:49:07 GMT+0800 (CST)

Categories: 数据库

0 Comments

发表评论

Avatar placeholder

邮箱地址不会被公开。 必填项已用*标注