私はMongoDBレプリカセットの増分バックアップを設定するタスクを開始点として与えられましたが、もちろんそれをグーグルで検索し、MongoDBドキュメントで何も見つかりませんでしたが、スタックオーバーフローでこの質問を見つけましたが、それは独自のソリューションの開発を奨励しましたタイラは非常に活発であるとは思わなかったので。
私は読ん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
この復元手法は、ミラーを解除して再構成と呼ばれます - プライマリを開始
- replicasetを再構成する
- データなしでセカンダリを起動し、最初の同期を実行させます。または、新しい
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
- JSONファイルを削除します
rm *.json
- bsonファイルの名前を変更します
mv oplog.rs.bson oplog.bson
復元する:
mongorestore -h <primary> --port <port> --oplogReplay /mnt/mongo-test_backup/1/local
すべてスクリプトを作成しました。後でGitHubでコミットできます。
問題は、ロジックに欠陥があるかどうかです。手順は非常に簡単で、まだ文書化されていないので、少し疑っています。
2
どのバージョンのMongoを使用していますか?wiretigerを使用している場合、db.fsyncLock()で参照した最初の項目に問題があります。MongoDB Incは、「WiredTigerでは、ロックオプションを指定したfsyncコマンドでは、データファイルが変更されないことを保証できません。そのため、バックアップを作成する目的でこれらのメソッドを使用しないでください。」リンク
—
-SDillon
@SDillonは3.0.4を使用していますが、WiredTigerは使用していません。少なくともまだ使用していません。ロックを書き込む代わりに、それを使用することにしました。mongodをすべて一緒に停止する必要があります。それは感謝フェアポイントだ
—
ティアゴ
私は、増分バックアップのために、以下のツール見つかっgithub.com/EqualExperts/Tayraは、この意志の助けを願っています
—
アフマドAbuhasna
「バージョン3.2での変更:ロックオプションを指定したfsyncコマンドは、MMAPv1またはWiredTigerストレージエンジンを使用してMongoDBインスタンスのデータファイルが変更されないようにし、バックアップ作成の目的で一貫性を提供します。」
—
安全
増分バックアップを行うための通常の(そして最も簡単な)方法は、LVMとスナップショットを使用することです。docs.mongodb.com/manual/tutorial/...
—
JJussi