Ich hatte die Aufgabe, inkrementelle Backups für das MongoDB-Replikatset einzurichten. Als Startpunkt habe ich natürlich gegoogelt und konnte nichts in MongoDB-Dokumenten finden. Diese Frage zu Stack Overflow hat mich jedoch dazu veranlasst, eine eigene Lösung zu entwickeln Tayra war nicht sehr aktiv.
Ich habe darüber gelesen oplog
und festgestellt, dass es sehr einfach war, etwas zu entwickeln, um das Protokoll wiederzugeben, aber es stellte sich heraus, dass ich das nicht musste, wie mongorestore
es für mich der Fall war.
Jetzt habe ich eine funktionierende Lösung mit Bash-Skripten und es war ziemlich einfach. Aus diesem Grund frage ich mich hier, ob meine Logik einen Fehler aufweist oder vielleicht etwas, das mich in Zukunft beißen wird.
Nachfolgend, wie ich das umgesetzt habe:
Vollständiger Sicherungsvorgang
- Sperre schreibt auf ein sekundäres Mitglied
db.fsyncLock()
- Schnappschuss machen
Notiere die letzte Position von oplog
db.oplog.rs.find().sort({$natural:-1}).limit(1).next().ts
Schreibvorgänge entsperren
db.fsyncUnlock()
Inkrementelle Sicherung
- Sperre schreibt auf ein sekundäres Mitglied
Erstellen Sie einen Speicherauszug von der aufgezeichneten Oplog-Position bei einer vollständigen (oder letzten inkrementellen) Sicherung:
mongodump --host <secondary> -d local -c oplog.rs -o /mnt/mongo-test_backup/1 --query '{ "ts" : { $gt : Timestamp(1437725201, 50) } }'
Letzte Oplog-Position aufzeichnen (wie bei vollständigen Backups)
- Schreibvorgänge entsperren
Vollständige Sicherung Wiederherstellungsvorgang
- stoppen Sie alle Instanzen von
mongod
- Snapshot Datenverzeichnis der Box kopieren , die die primären sein werden, aber sicher , dass alle ausschließen machen
local*
undmongod.lock
diese Restore - Technik genannt wird recon durch den Spiegel brechen - Primär starten
- Konfigurieren Sie das Replicaset neu
- Starten Sie Secondaries ohne Daten, und lassen Sie sie die erste Synchronisierung durchführen. Oder kopieren Sie die Daten von der neuen Primärdatenbank mit einer neuen
local
Datenbank
Inkrementelle Sicherung wiederherstellen
Als wir ein inkrementelles Backup erstellt haben, wurde es folgendermaßen gespeichert:
/mnt/mongo-test_backup/1/local/oplog.rs.bson
/mnt/mongo-test_backup/1/local/oplog.rs.metadata.json
Wir werden weitergeleitet, oplog.rs.bson
aber wir müssen es umbenennen, also sind hier die Schritte:
- Wechseln Sie in das Sicherungsverzeichnis:
cd /mnt/mongo-test_backup/1/local
- Löschen Sie die JSON-Datei
rm *.json
- benennen sie die bson datei um
mv oplog.rs.bson oplog.bson
stelle es wieder her:
mongorestore -h <primary> --port <port> --oplogReplay /mnt/mongo-test_backup/1/local
Ich habe alles geskriptet, ich kann es später auf GitHub festschreiben.
Die Frage ist, ob es einen Fehler in der Logik gibt. Ich bin ein bisschen misstrauisch, da das Verfahren recht unkompliziert ist und ich es dennoch nirgendwo dokumentiert finden konnte.