もちろん、開始点として、MongoDBレプリカセットの増分バックアップをセットアップするタスクが与えられました。もちろん、ググってみましたが、MongoDBドキュメントで何も見つかりませんでしたが、スタックオーバーフローで question を見つけました。 Tayraはあまり活発ではなかったので、自分のソリューションを開発することを奨励しました。
私はoplog
について読んで、ログを再生するための何かを開発するのは非常に簡単であることに気付きましたが、mongorestore
が私のためにそれを行う必要がなかったことがわかりました。
今私はbashスクリプトを使用した実用的なソリューションを持っていますが、それは非常に簡単でした。それが私のロジックに欠陥があるのか、あるいは将来私に噛み付くものがあるのかどうかをここで尋ねている理由です。
以下に私がそれを実装した方法:
db.fsyncLock()
Oplogから最後の位置を記録
_db.oplog.rs.find().sort({$natural:-1}).limit(1).next().ts
_
書き込みのロック解除db.fsyncUnlock()
完全(または最新の増分)バックアップ時に記録されたoplog位置からoplogをダンプします。
_mongodump --Host <secondary> -d local -c oplog.rs -o /mnt/mongo-test_backup/1
--query '{ "ts" : { $gt : Timestamp(1437725201, 50) } }'
_
最新のoplog位置を記録する(完全バックアップの場合と同じ方法)
mongod
のすべてのインスタンスを停止local*
_および_mongod.lock
_を必ず除外してください。この復元手法は次のように呼ばれます ミラーを解除して再構成local
データベースを使用して、新しいプライマリからデータをコピーします増分バックアップを作成すると、次のように保存されます。
_/mnt/mongo-test_backup/1/local/oplog.rs.bson
/mnt/mongo-test_backup/1/local/oplog.rs.metadata.json
_
私たちは_oplog.rs.bson
_に深く関わっていますが、名前を変更する必要があるため、以下に手順を示します。
cd /mnt/mongo-test_backup/1/local
_rm *.json
_mv oplog.rs.bson oplog.bson
_それを復元する:
_mongorestore -h <primary> --port <port> --oplogReplay /mnt/mongo-test_backup/1/local
_
すべてスクリプト化してありますが、後でGitHubでコミットする可能性があります。
問題は、ロジックに欠陥があるかどうかです。手順が非常に単純であり、どこにも文書化されていないので、私は少し不審です。
あなたの質問に答えるために。番号!ロジックに失敗はなく、問題なく動作するはずです。ただし、LVMスナップショットを使用できる場合は、バックアップを行うためのより良い方法です。