我们每天都在使用 mongoDB 并备份我们的数据库,并每小时保存记录的 oplog 以进行间接备份。
恢复备份和操作日志按预期工作,我们正在恢复初始备份:
mongorestore --drop --oplogReplay -path "path to backup dump"
然后按顺序应用每个 oplog:
mongorestore --stopOnError --oplogReplay "path to oplog dump"
但是,在我们的 oplog 集合中似乎总是有一个 oplog 永远不会完成,例如:
2015-12-14T15:57:31.931+1100 building a list of dbs and collections to restore from C:\oplogs\oplog-0102\local dir
2015-12-14T15:57:31.932+1100 replaying oplog
2015-12-14T15:57:34.943+1100 [########################] oplog 280.7 KB/280.7 KB (100.0%)
2015-12-14T15:57:37.942+1100 [########################] oplog 280.7 KB/280.7 KB (100.0%)
2015-12-14T15:57:40.941+1100 [########################] oplog 280.7 KB/280.7 KB (100.0%)
2015-12-14T15:57:43.941+1100 [########################] oplog 280.7 KB/280.7 KB (100.0%)
2015-12-14T15:57:46.942+1100 [########################] oplog 280.7 KB/280.7 KB (100.0%)
2015-12-14T15:57:49.942+1100 [########################] oplog 280.7 KB/280.7 KB (100.0%)
2015-12-14T15:57:52.941+1100 [########################] oplog 280.7 KB/280.7 KB (100.0%)
2015-12-14T15:57:55.942+1100 [########################] oplog 280.7 KB/280.7 KB (100.0%)
2015-12-14T15:57:58.941+1100 [########################] oplog 280.7 KB/280.7 KB (100.0%)
这个重播 oplog 永远持续下去,永远不会结束。如果我在任务管理器中强制关闭 mongorestore 并重置 mongo 服务,则该 oplog 的恢复似乎已成功完成。
有没有我可以尝试恢复的替代方法或我在这里做错了什么?我希望这是足够的信息。
编辑: 我很高兴 mongo 是开源的,我查看了 mongorestore 的源代码,并在 c# 中实现了我自己的版本。mongorestore 对 oplog.bson 文件中提供的条目运行“applyOps”命令。 https://docs.mongodb.org/v3.0/reference/command/applyOps/
在 c# 中做了类似的事情后,我发现当其中一个条目尝试使用以下命令更新“system.indexes”集合时,该命令永远不会完成:
注意:我已经删除了实际的数据库/集合名称等。
{
"ts" : Timestamp(1450063020, 1),
"h" : NumberLong("513294342778035173"),
"v" : 2,
"op" : "i",
"ns" : "myDb.system.indexes",
"o" : {
"ns" : "myDb.randomCollection",
"key" : {
"SomeKeyValue" : 1
},
"name" : "SomeKeyValue",
"background" : true,
"sparse" : true,
"unique" : true
}
}
目前,我已经过滤掉了所有正在修改“system.indexes”集合的条目,这感觉真是个坏主意。