1

mongoDB を使用してデータベースを毎日バックアップし、記録された oplog を 1 時間ごとに増分バックアップ用に保存しています。

バックアップと oplog の復元は期待どおりに機能します。初期バックアップを次のように復元しています。

mongorestore --drop --oplogReplay -path "path to backup dump"

次に、各 oplog を次の順序で適用します。

mongorestore --stopOnError --oplogReplay "path to oplog dump"

ただし、oplog のコレクションには、決して完了しない oplog が常に 1 つあるようです。たとえば、次のようになります。

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#で同様のことを行った後、これらのエントリの1つが「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