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」コレクションを変更しているすべてのエントリを除外しましたが、これは本当に悪い考えのように感じます。