1

我们每天都在使用 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”集合的条目,这感觉真是个坏主意。

4

0 回答 0