一、写入数据
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)
0 Comments