Sichern, Wiederherstellen und Migrieren einer MongoDB-Datenbank unter Ubuntu 14.04

MongoDB ist eine der beliebtesten NoSQL-Datenbank-Engines. Es ist bekannt für seine Skalierbarkeit, Leistungsfähigkeit, Zuverlässigkeit und Benutzerfreundlichkeit. In diesem Artikel erfahren Sie, wie Sie Ihre MongoDB-Datenbanken sichern, wiederherstellen und migrieren.

Beim Importieren und Exportieren einer Datenbank werden Daten in einem für Menschen lesbaren Format verarbeitet, das mit anderen Softwareprodukten kompatibel ist. Im Gegensatz dazu erstellen oder verwenden die Sicherungs- und Wiederherstellungsvorgänge MongoDB-spezifische Binärdaten, wodurch nicht nur die Konsistenz und Integrität Ihrer Daten, sondern auch die spezifischen MongoDB-Attribute erhalten bleiben. Daher ist es für die Migration normalerweise vorzuziehen, Backup und Restore zu verwenden, solange Quell- und Zielsystem kompatibel sind.

Voraussetzungen

Stellen Sie vor dem Ausführen dieses Lernprogramms sicher, dass folgende Voraussetzungen erfüllt sind:

Sofern nicht anders angegeben, sollten alle Befehle, für die in diesem Lernprogramm Root-Berechtigungen erforderlich sind, als Nicht-Root-Benutzer mit Sudo-Berechtigungen ausgeführt werden.

Grundlagen verstehen

Bevor Sie mit diesem Artikel fortfahren, benötigen Sie ein Grundverständnis in dieser Angelegenheit. Wenn Sie Erfahrung mit gängigen relationalen Datenbanksystemen wie MySQL haben, können Sie bei der Arbeit mit MongoDB einige Ähnlichkeiten feststellen.

Das Erste, was Sie wissen sollten, ist, dass MongoDB die Formate json und bson (binary json) zum Speichern seiner Informationen verwendet. Json ist das für Menschen lesbare Format, das sich perfekt zum Exportieren und schließlich zum Importieren Ihrer Daten eignet. Sie können Ihre exportierten Daten weiterhin mit jedem Tool verwalten, das JSON unterstützt, einschließlich eines einfachen Texteditors.

Ein Beispiel für ein JSON-Dokument sieht folgendermaßen aus:

Beispiel für das json-Format

{"address":[
   {"building":"1007", "street":"Park Ave"},
   {"building":"1008", "street":"New Ave"},
]}

Es ist sehr praktisch, mit Json zu arbeiten, es werden jedoch nicht alle in bson verfügbaren Datentypen unterstützt. Dies bedeutet, dass es bei Verwendung von json zu einem so genannten "Vertrauensverlust" der Informationen kommt. Zum Sichern und Wiederherstellen ist es besser, das binäre bson zu verwenden.

Zweitens müssen Sie sich keine Gedanken über das explizite Erstellen einer MongoDB-Datenbank machen. Wenn die für den Import angegebene Datenbank noch nicht vorhanden ist, wird sie automatisch erstellt. Noch besser ist die Struktur der Sammlungen (Datenbanktabellen). Im Gegensatz zu anderen Datenbank-Engines wird in MongoDB die Struktur beim Einfügen des ersten Dokuments (Datenbankzeile) wieder automatisch erstellt.

Drittens kann das Lesen oder Einfügen großer Datenmengen in MongoDB, z. B. für die in diesem Artikel beschriebenen Aufgaben, ressourcenintensiv sein und einen Großteil der CPU, des Arbeitsspeichers und des Speicherplatzes in Anspruch nehmen. Dies ist von entscheidender Bedeutung, da MongoDB häufig für große Datenbanken und Big Data verwendet wird. Die einfachste Lösung für dieses Problem besteht darin, die Exporte und Sicherungen nachts oder außerhalb der Stoßzeiten auszuführen.

Viertens kann die Informationskonsistenz problematisch sein, wenn Sie einen ausgelasteten MongoDB-Server haben, auf dem sich die Informationen während des Datenbankexports oder -sicherungsprozesses ändern. Es gibt keine einfache Lösung für dieses Problem, aber am Ende dieses Artikels finden Sie Empfehlungen, die Sie zum Thema Replikation lesen sollten.

Während Sie die import and export functions zum Sichern verwenden können Wenn Sie Ihre Daten wiederherstellen möchten, gibt es bessere Möglichkeiten, um die vollständige Integrität Ihrer MongoDB-Datenbanken sicherzustellen. Um Ihre Daten zu sichern, sollten Sie den Befehl + mongodump + verwenden. Verwenden Sie zum Wiederherstellen + mongorestore +. Mal sehen, wie sie funktionieren.

Sichern einer MongoDB-Datenbank

Lassen Sie uns zuerst das Sichern Ihrer MongoDB-Datenbank behandeln.

Ein wichtiges Argument für + mongodump + ist + - db +, das den Namen der Datenbank angibt, die Sie sichern möchten. Wenn Sie keinen Datenbanknamen angeben, sichert "+ mongodump " alle Ihre Datenbanken. Das zweite wichtige Argument ist " - out ", das das Verzeichnis angibt, in dem die Daten gespeichert werden. Nehmen wir ein Beispiel zum Sichern der Datenbank " newdb " und zum Speichern im Verzeichnis " / var / backups / mongobackups ". Im Idealfall haben wir jedes unserer Backups in einem Verzeichnis mit dem aktuellen Datum wie " / var / backups / mongobackups / 01-20-16 " (20. Januar 2016). Zuerst erstellen wir das Verzeichnis " / var / backups / mongobackups +" mit dem folgenden Befehl:

sudo mkdir /var/backups/mongobackups

Dann sollte unser Backup-Befehl so aussehen:

sudo mongodump --db newdb --out /var/backups/mongobackups/`date +"%m-%d-%y"`

Eine erfolgreich ausgeführte Sicherung hat eine Ausgabe wie:

Ausgabe von Mongodump

2016-01-20T10:11:57.685-0500    writing newdb.restaurants to /var/backups/mongobackups/01-20-16/newdb/restaurants.bson
2016-01-20T10:11:57.907-0500    writing newdb.restaurants metadata to /var/backups/mongobackups/01-20-16/newdb/restaurants.metadata.json
2016-01-20T10:11:57.911-0500    done dumping newdb.restaurants (25359 documents)
2016-01-20T10:11:57.911-0500    writing newdb.system.indexes to /var/backups/mongobackups/01-20-16/newdb/system.indexes.bson

Beachten Sie, dass wir im obigen Verzeichnispfad "+ date "% m-% d-% y "" verwendet haben, wodurch das aktuelle Datum automatisch ermittelt wird. Dies ermöglicht es uns, die Backups im Verzeichnis + / var / backups // + zu haben. Dies ist besonders praktisch, wenn wir die Backups automatisieren.

Zu diesem Zeitpunkt haben Sie eine vollständige Sicherung der Datenbank "+ newdb " im Verzeichnis " / var / backups / mongobackups // newdb / ". Dieses Backup hat alles, um die ` newdb +` korrekt wiederherzustellen und die so genannte "Treue" zu wahren.

In der Regel sollten Sie regelmäßige Sicherungen durchführen, z. B. täglich, und zwar vorzugsweise zu einem Zeitpunkt, an dem der Server am wenigsten ausgelastet ist. Daher können Sie den Befehl "+ mongodump +" als Cron-Job festlegen, damit er regelmäßig ausgeführt wird, z. jeden Tag um 03:03 Uhr. Um diese offene crontab auszuführen, sieht der Editor von cron folgendermaßen aus:

sudo crontab -e

Beachten Sie, dass Sie beim Ausführen von + sudo crontab + die Cron-Jobs für den Root-Benutzer bearbeiten. Dies wird empfohlen, da die Cron-Elemente für Ihren Benutzer möglicherweise nicht ordnungsgemäß ausgeführt werden, insbesondere wenn für Ihr sudo-Profil eine Kennwortüberprüfung erforderlich ist.

Geben Sie in die Eingabeaufforderung von crontab den folgenden Befehl + mongodump + ein:

Crontab-Fenster

3 3 * * * mongodump --out /var/backups/mongobackups/`date +"%m-%d-%y"`

Im obigen Befehl wird das Argument "+ - db +" absichtlich weggelassen, da normalerweise alle Datenbanken gesichert werden sollen.

Abhängig von der Größe Ihrer MongoDB-Datenbank wird Ihnen möglicherweise bald der Festplattenspeicher mit zu vielen Sicherungen ausgehen. Aus diesem Grund wird empfohlen, die alten Backups regelmäßig zu bereinigen oder zu komprimieren. Um beispielsweise alle Backups zu löschen, die älter als 7 Tage sind, können Sie den folgenden bash-Befehl verwenden:

find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} \;

Ähnlich wie der vorherige Befehl + mongodump + kann dieser auch als Cron-Job hinzugefügt werden. Es sollte kurz vor dem Start der nächsten Sicherung ausgeführt werden, z. um 03:01 Uhr. Öffnen Sie dazu erneut crontab:

sudo crontab -e

Danach folgende Zeile einfügen:

Crontab-Fenster

3 1 * * * find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} \;

Wenn Sie alle Aufgaben in diesem Schritt ausführen, wird eine gute Sicherungslösung für Ihre MongoDB-Datenbanken sichergestellt.

Wiederherstellen und Migrieren einer MongoDB-Datenbank

Durch das Wiederherstellen Ihrer MongoDB-Datenbank aus einer früheren Sicherung (z. B. einer aus dem vorherigen Schritt) können Sie die genaue Kopie Ihrer MongoDB-Informationen einschließlich aller Indizes und Datentypen zu einem bestimmten Zeitpunkt abrufen. Dies ist besonders nützlich, wenn Sie Ihre MongoDB-Datenbanken migrieren möchten. Zum Wiederherstellen von MongoDB verwenden wir den Befehl "+ mongorestore ", der mit der von " mongodump +" erstellten binären Sicherung zusammenarbeitet.

Lassen Sie uns unsere Beispiele mit der "+ newdb " - Datenbank fortsetzen und sehen, wie wir sie aus der zuvor erstellten Sicherung wiederherstellen können. Als Argumente geben wir zuerst den Namen der Datenbank mit dem Argument " - db " an. Dann stellen wir mit " - drop " sicher, dass die Zieldatenbank zuerst gelöscht wird, damit die Sicherung in einer sauberen Datenbank wiederhergestellt wird. Als letztes Argument geben wir das Verzeichnis der letzten Sicherung an, ` / var / backups / mongobackups // newdb / +`. Der gesamte Befehl sieht also folgendermaßen aus (ersetzen Sie ihn durch das Datum der Sicherung, die Sie wiederherstellen möchten):

sudo mongorestore --db newdb --drop /var/backups/mongobackups//newdb/

Eine erfolgreiche Ausführung zeigt die folgende Ausgabe:

Ausgabe von mongorestore

2016-01-20T10:44:47.876-0500    building a list of collections to restore from /var/backups/mongobackups/01-20-16/newdb/ dir
2016-01-20T10:44:47.908-0500    reading metadata file from /var/backups/mongobackups/01-20-16/newdb/restaurants.metadata.json
2016-01-20T10:44:47.909-0500    restoring newdb.restaurants from file /var/backups/mongobackups/01-20-16/newdb/restaurants.bson
2016-01-20T10:44:48.591-0500    restoring indexes for collection newdb.restaurants from metadata
2016-01-20T10:44:48.592-0500    finished restoring newdb.restaurants (25359 documents)
2016-01-20T10:44:48.592-0500    done

In diesem Fall werden die Daten auf demselben Server wiederhergestellt, auf dem die Sicherung erstellt wurde. Wenn Sie die Daten auf einen anderen Server migrieren möchten und dieselbe Technik anwenden möchten, kopieren Sie einfach das Sicherungsverzeichnis, in unserem Fall "+ / var / backups / mongobackups // newdb / +", auf den anderen Server.

Fazit

Dieser Artikel enthält eine Einführung in die Grundlagen der Verwaltung Ihrer MongoDB-Daten in Bezug auf das Sichern, Wiederherstellen und Migrieren von Datenbanken. Weitere Informationen finden Sie unter Einrichten einer skalierbaren MongoDB-Datenbank, in der sich die MongoDB-Replikation befindet erklärt.

Die Replikation ist nicht nur für die Skalierbarkeit nützlich, sondern auch für die aktuellen Themen wichtig. Mit der Replikation können Sie Ihren MongoDB-Dienst ohne Unterbrechung von einem Slave-MongoDB-Server ausführen, während Sie den Master-Server nach einem Fehler wiederherstellen. Teil der Replikation ist auch das operations log (oplog), das alle Vorgänge aufzeichnet, die Ihre Daten ändern. Sie können dieses Protokoll wie das Binärprotokoll in MySQL verwenden, um Ihre Daten nach der letzten Sicherung wiederherzustellen. Denken Sie daran, dass Sicherungen normalerweise nachts durchgeführt werden. Wenn Sie sich entschließen, eine Sicherung am Abend wiederherzustellen, werden Ihnen alle Aktualisierungen seit der letzten Sicherung fehlen.