2012-08-15 7 views
6

Ich möchte tägliche Backups für eine einzige Mongodb-Datenbank, wahrscheinlich mit Mongodump. Um keine Daten zu verlieren, möchte ich, dass dies inkrementell geschieht. Wenn also etwas mitten am Tag schief geht, muss ich die Änderungen für diesen Tag bis zum Zeitpunkt des Fehlers nach dem Erstellen eines Mongorestores wiederholen können.Möchten Sie ein inkrementelles Backup für Mongodb tun. Journaling? Oplog?

Verstehe ich richtig, dass ich ein oplog dafür verwenden muss? Oder journalisiert man die Antwort? Ich habe folgendes versucht:

  1. Meine Mongo-Datenbank in ein Replikat-Set von nur einem, so dass es ein Oplog erstellt. (Das fühlt sich ziemlich hacky)
  2. Neustarten mongod mit der --oplog Option
  3. Änderungen durchführen, die in der oplog aufgezeichnet werden soll

jedoch nichts jemals in der oplog gespeichert wird. Was ist der beste Weg, um solche inkrementellen Backups durchzuführen? Ich bin im Grunde auf der Suche nach einem ähnlichen Ansatz für die Wiedergabe des mysql binlog.

Dank

Antwort

5

MongoDB bietet keine inkrementelle Backup-Option aus der Box, aber es ist möglich, eine Datei Snapshot und Wiedergabe der oplog zu tun. Haben Sie Ihren Server als Replikat nach den in der Dokumentation beschriebenen Schritten eingerichtet? http://www.mongodb.org/display/DOCS/Replica+Sets+-+Basics

Können Sie uns auch den Zweck dieser Backups nennen? Haben Sie darüber nachgedacht, einen zweiten Knoten zur Datenhaltbarkeit zu Ihrer Replikatgruppe hinzuzufügen?

Wenn Sie die Schritte zur Einrichtung des Servers als Mitglied eines Replikatsatzes durchlaufen haben, können Sie rs.status() in der Shell ausführen?

Noch eine Anmerkung (nur zur Verdeutlichung) - Journaling ist nicht als Backup-Strategie gedacht; Journaling stellt lediglich sicher, dass die Datenbank bei einem Failover in einen konsistenten Zustand zurückkehren kann. Es wird dringend empfohlen, mit aktiviertem Journaling zu arbeiten. Hier

ist die MongoDB Dokumentation für Sicherungen: http://www.mongodb.org/display/DOCS/Backups

+0

Danke für die Klarstellung, ich habe mir das gestern genauer angeschaut und ich verstehe was passieren muss. Was ich machen möchte, ist einen täglichen Mongodump zu machen, es in S3 zu speichern und jede Stunde mein Oplog in S3 zu speichern. Ich habe zwei Follow-up-Fragen, wenn Sie so freundlich wären: 1. Mein oplog ist in der lokalen Datenbank gespeichert und ich kann jetzt von der Mongo-Shell darauf zugreifen. Um das oplog zu sichern, kann ich einfach alle meine lokalen (1-N) und local.ns Dateien nach s3 kopieren? 2. Wie können oplogs am besten wiedergegeben werden? Ist mongorestore --oplogReplay genug dafür? Vielen Dank! –

+2

mongodump --oplog stellt sicher, dass alle Oplog-Einträge, die während des Speicherabzugs erstellt wurden, mit mongorestore --oplogReplay wiedergegeben werden können. Sie können mongorestore --oplogReplay nicht verwenden, um die nach dem Abschluss des Speicherabzugs aufgetretenen oplog-Vorgänge erneut anzuzeigen. Eine Lösung, die Sie untersuchen können, ist, die oplog-Sammlung stündlich auszugeben und den Befehl applyOps zu verwenden: http://docs.mongodb.org/manual/reference/commands/#applyOps – Jenna

+1

Dies könnte hacky sein .. aber ich denke mit mongorestore --oplogReplay hat tatsächlich funktioniert. Was ich getan habe, war das Moglove des Oplogs, bewegte die resultierenden 'oplog.rs'.bson 'zu' dump/oplog.bson 'und rannte mongorestore --oplogReplay. Ist das gefährlich? Wenn es so ist werde ich definitiv mit der applyOps Technik gehen. –

0

Der beste Weg, um die Sicherungen zu tun ist, Ops Manager als Teil Ihrer MongoDB-Infrastruktur zu konfigurieren, aber es tut so viel mehr als nur Backups ...

Verwandte Themen