Mongodb増分バックアップ


26

私はMongoDBレプリカセットの増分バックアップを設定するタスクを開始点として与えられましたが、もちろんそれをグーグルで検索し、MongoDBドキュメントで何も見つかりませんでしたが、スタックオーバーフローでこの質問を見つけましたが、それは独自のソリューションの開発を奨励しましたタイラは非常に活発であるとは思わなかったので。

私は読んoplogし、ログを再生するために何かを開発することは非常に簡単でした実現し、それは私がように持っていなかったことが判明しmongorestoreていることが私のために行います。

これで、bashスクリプトを使用した実用的なソリューションが得られたため、非常に簡単でした。それが、ここに私のロジックに欠陥があるかどうか、または将来私に噛み付く何かを尋ねる理由です。

以下の実装方法:

完全バックアップ手順

  1. セカンダリメンバーへのロック書き込み db.fsyncLock()
  2. スナップショットを撮ります
  3. oplogから最後の位置を記録する

    db.oplog.rs.find().sort({$natural:-1}).limit(1).next().ts
  4. 書き込みのロックを解除 db.fsyncUnlock()

増分バックアップ手順

  1. セカンダリメンバーへのロック書き込み
  2. 完全(または最新の増分)バックアップで記録されたoplog位置からoplogをダンプします。

    mongodump --host <secondary> -d local -c oplog.rs -o /mnt/mongo-test_backup/1 
        --query '{ "ts" : { $gt :  Timestamp(1437725201, 50) } }'
  3. 最新のoplog位置を記録します(完全バックアップの場合と同じ方法)。

  4. 書き込みのロックを解除

完全バックアップの復元手順

  1. のすべてのインスタンスを停止します mongod
  2. プライマリになるボックスのデータディレクトリにスナップショットをコピーしますが、必ずすべてを除外しlocal*てください。mongod.lock この復元手法は、ミラーを解除して再構成と呼ばれます
  3. プライマリを開始
  4. replicasetを再構成する
  5. データなしでセカンダリを起動し、最初の同期を実行させます。または、新しいlocalデータベースを使用して新しいプライマリからデータをコピーします

増分バックアップを復元する

増分バックアップを作成すると、次のように保存されました。

/mnt/mongo-test_backup/1/local/oplog.rs.bson
/mnt/mongo-test_backup/1/local/oplog.rs.metadata.json

私たちは詳しく調べてoplog.rs.bsonいますが、名前を変更する必要があるので、以下の手順を実行します

  1. ディレクトリをバックアップに変更します。 cd /mnt/mongo-test_backup/1/local
  2. JSONファイルを削除します rm *.json
  3. bsonファイルの名前を変更します mv oplog.rs.bson oplog.bson
  4. 復元する:

    mongorestore -h <primary> --port <port> --oplogReplay /mnt/mongo-test_backup/1/local

すべてスクリプトを作成しました。後でGitHubでコミットできます。

問題は、ロジックに欠陥があるかどうかです。手順は非常に簡単で、まだ文書化されていないので、少し疑っています。


2
どのバージョンのMongoを使用していますか?wiretigerを使用している場合、db.fsyncLock()で参照した最初の項目に問題があります。MongoDB Incは、「WiredTigerでは、ロックオプションを指定したfsyncコマンドでは、データファイルが変更されないことを保証できません。そのため、バックアップを作成する目的でこれらのメソッドを使用しないでください。」リンク
-SDillon

1
@SDillonは3.0.4を使用していますが、WiredTigerは使用していません。少なくともまだ使用していません。ロックを書き込む代わりに、それを使用することにしました。mongodをすべて一緒に停止する必要があります。それは感謝フェアポイントだ
ティアゴ

私は、増分バックアップのために、以下のツール見つかっgithub.com/EqualExperts/Tayraは、この意志の助けを願っています
アフマドAbuhasna

1
「バージョン3.2での変更:ロックオプションを指定したfsyncコマンドは、MMAPv1またはWiredTigerストレージエンジンを使用してMongoDBインスタンスのデータファイルが変更されないようにし、バックアップ作成の目的で一貫性を提供します。」
安全

増分バックアップを行うための通常の(そして最も簡単な)方法は、LVMとスナップショットを使用することです。docs.mongodb.com/manual/tutorial/...
JJussi

回答:


3

あなたの質問に答えるために。いや!ロジックに失敗はなく、問題なく動作するはずです。ただし、LVMスナップショットを使用できる場合は、バックアップを行う方が適切です。


LVMスナップショットの増分バックアップはどのように行いますか?ありがとう!
TanisDLJ

LVMスナップショットは本質的に増分です。スナップショットは瞬間的なものであり、記録されるのは変更のみです。
JJussi

はい、スナップショットを撮っただけで、増分です。ただし、スナップショットをアーカイブすると、完全バックアップになります。たとえば、重複のように異なる増分バックアップをアーカイブすることはできません。また、増分バックアップ用に30分ごとにスナップショットの作成を開始することはできません。パフォーマンスが著しく低下するためです。
TanisDLJ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.