当我们对数据出现误操作的时候,可以利用oplog恢复数据。
使用前提:
- 1、环境是副本集
- 2、必须有全备
- 2、全备后oplog没有被覆盖
数据全备
- mongodump -h 172.16.254.133 --port 27017 -o /mongodb/backup/backup
模拟故障
写入数据
- handong1:PRIMARY> for (var i = 1; i <= 100; i++) {
- ... db.test.insert( { id : i , name: "handong" , name1:"handong", name2:"handong", name3:"handong"} )
- ... }
- WriteResult({ "nInserted" : 1 })
- handong1:PRIMARY>
- handong1:PRIMARY> db.test.count()
- 100
-
模拟误操作
- handong1:PRIMARY> db.test.remove({})
- WriteResult({ "nRemoved" : 100 })
- handong1:PRIMARY> db.test.count()
- 0
-
所有文档被误删除。
恢复步骤
备份oplog
- mongodump -h 172.16.254.133 --port 27017 -d local -c oplog.rs -o /mongodb/backup
- 2021-04-30T18:32:29.077+0800 writing local.oplog.rs to /mongodb/backup/local/oplog.rs.bson
- 2021-04-30T18:32:32.039+0800 local.oplog.rs 7108
- 2021-04-30T18:32:35.038+0800 local.oplog.rs 17912
- 2021-04-30T18:32:38.041+0800 local.oplog.rs 28226
- 2021-04-30T18:32:41.039+0800 local.oplog.rs 38642
- 2021-04-30T18:32:44.042+0800 local.oplog.rs 50679
- 2021-04-30T18:32:47.040+0800 local.oplog.rs 64001
- 2021-04-30T18:32:50.040+0800 local.oplog.rs 77265
- 2021-04-30T18:32:53.038+0800 local.oplog.rs 89739
- 2021-04-30T18:32:56.038+0800 local.oplog.rs 102449
- 2021-04-30T18:32:57.697+0800 local.oplog.rs 132459
- 2021-04-30T18:32:57.697+0800 done dumping local.oplog.rs (132459 documents)
-
解析oplog
- bsondump /mongodb/backup/local/oplog.rs.bson > /mongodb/backup/local/local.log
- 2021-04-30T18:34:27.612+0800 132459 objects found
将oplog备份和全备复制到standalone机
- scp -r backup/ 172.16.254.130:/mongodb/backup/
- scp -r local/ 172.16.254.130:/mongodb/backup/backup
查找误操作时间点
通过查看解析完的日志local.log发现误操作的时间点在1619778429。
进行数据恢复
检查恢复结果
- > show dbs
- admin 0.000GB
- config 0.000GB
- db3 0.000GB
- db4 3.355GB
- db5 0.000GB
- local 0.000GB
- ycsb 0.060GB
- ycsb1 0.041GB
- >
- >
- > use db5
- switched to db db5
- >
- > db.test.count()
- 100
-
可以看到我们前期插入的100记录以及恢复成功。
到此这篇关于MongoDB利用oplog恢复数据介绍的文章就介绍到这了,更多相关oplog数据恢复内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!