Der Autor wählte den COVID-19-Hilfsfonds aus, um im Rahmen des „Write for Donations“-Programms eine Spende zu erhalten.
Einführung
MongoDB ist einer der beliebtesten NoSQL-Datenbank-Engines. Sie ist bekannt dafür, skalierbar, robust, zuverlässig und benutzerfreundlich zu sein. In diesem Artikel werden Sie eine BeispielmongoDB-Datenbank sichern, wiederherstellen und migrieren.
Das Importieren und Exportieren einer Datenbank bedeutet, Daten in einem für Menschen lesbaren Format zu verarbeiten, das mit anderen Softwareprodukten kompatibel ist. Im Gegensatz dazu erstellen oder verwenden die Backup- und Wiederherstellungsvorgänge von MongoDB spezifische binäre Daten, die nicht nur die Konsistenz und Integrität Ihrer Daten, sondern auch ihre spezifischen MongoDB-Attribute bewahren. Daher ist es für die Migration normalerweise bevorzugt, Backup und Wiederherstellung zu verwenden, solange die Quell- und Zielsysteme kompatibel sind.
Voraussetzungen
Bevor Sie diesem Tutorial folgen, stellen Sie bitte sicher, dass Sie die folgenden Voraussetzungen erfüllen:
- Ein Ubuntu 20.04-Server mit einem sudo-nicht-root-Benutzer und einer Firewall, die Sie mit dem Anleitung zum Einrichten eines Ubuntu 20.04-Startservers einrichten können.
- Installiertes und konfiguriertes MongoDB gemäß der Anleitung So installieren Sie MongoDB unter Ubuntu 20.04.
- Beispiel-Datenbank für MongoDB importiert gemäß den Anweisungen in So importieren und exportieren Sie eine MongoDB-Datenbank.
Sofern nicht anders angegeben, sollten alle Befehle, die Root-Berechtigungen erfordern, in diesem Tutorial als nicht-root-Benutzer mit sudo-Berechtigungen ausgeführt werden.
Schritt 1 — Verwenden von JSON und BSON in MongoDB
Bevor Sie mit diesem Artikel fortfahren, ist ein grundlegendes Verständnis des Themas erforderlich. Wenn Sie Erfahrung mit anderen NoSQL-Datenbanksystemen wie Redis haben, finden Sie möglicherweise einige Ähnlichkeiten beim Arbeiten mit MongoDB.
MongoDB verwendet JSON- und BSON (binäres JSON)-Formate zum Speichern seiner Informationen. JSON ist das menschenlesbare Format, das perfekt für den Export und schließlich den Import Ihrer Daten geeignet ist. Sie können Ihre exportierten Daten mit jedem Tool verwalten, das JSON unterstützt, einschließlich eines einfachen Texteditors.
Ein Beispiel für ein .json
-Dokument sieht so aus:
{"address":[
{"building":"1007", "street":"Park Ave"},
{"building":"1008", "street":"New Ave"},
]}
JSON ist bequem zu verwenden, unterstützt jedoch nicht alle in BSON verfügbaren Datentypen. Dies bedeutet, dass es zu einem sogenannten „Verlust an Genauigkeit“ der Informationen kommt, wenn Sie JSON verwenden. Für die Sicherung und Wiederherstellung ist es besser, das binäre BSON zu verwenden.
Zweitens müssen Sie sich keine Gedanken darüber machen, explizit eine MongoDB-Datenbank zu erstellen. Wenn die Datenbank, die Sie für den Import angeben, noch nicht vorhanden ist, wird sie automatisch erstellt. Noch besser ist der Fall bei der Struktur der Sammlungen (Datenbanktabellen). Im Gegensatz zu anderen Datenbank-Engines wird die Struktur in MongoDB wieder automatisch beim ersten Einfügen eines Dokuments (Datenbankzeile) erstellt.
Drittens können das Lesen oder Einfügen großer Datenmengen, wie bei den Aufgaben dieses Artikels, in MongoDB ressourcenintensiv sein und viel CPU-, Speicher- und Festplattenplatz verbrauchen. Dies ist wichtig, 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 während der Nacht oder außerhalb der Spitzenzeiten auszuführen.
Viertens könnte die Informationskonsistenz problematisch sein, wenn Sie einen geschäftigen MongoDB-Server haben, auf dem sich die Informationen während des Datenbankexports oder -sicherungsvorgangs ändern. Eine mögliche Lösung für dieses Problem ist Replikation, über die Sie nach weiterführenden Informationen zum Thema MongoDB nachdenken können.
Obwohl Sie die Import- und Exportfunktionen verwenden können, um Ihre Daten zu sichern und wiederherzustellen, gibt es bessere Möglichkeiten, die vollständige Integrität Ihrer MongoDB-Datenbanken sicherzustellen. Um Ihre Daten zu sichern, sollten Sie den Befehl mongodump
verwenden. Für die Wiederherstellung verwenden Sie mongorestore
. Schauen wir uns an, wie sie funktionieren.
Schritt 2 – Verwendung von mongodump
zum Sichern einer MongoDB-Datenbank
Lassen Sie uns zuerst die Sicherung Ihrer MongoDB-Datenbank behandeln.
Ein wesentliches 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 definiert, in das die Daten exportiert werden sollen. Zum Beispiel, sichern wir die Datenbank newdb
und speichern sie im Verzeichnis /var/backups/mongobackups
. Ideal wäre es, jede unserer Sicherungen in einem Verzeichnis mit dem aktuellen Datum zu haben, wie zum Beispiel /var/backups/mongobackups/10-29-20
.
Erstellen Sie zuerst das Verzeichnis /var/backups/mongobackups
:
Dann führen Sie mongodump
aus:
Sie sehen eine Ausgabe wie diese:
Output2020-10-29T19:22:36.886+0000 writing newdb.restaurants to
2020-10-29T19:22:36.969+0000 done dumping newdb.restaurants (25359 documents)
Beachten Sie, dass Sie im obigen Verzeichnispfad date +'%m-%d-%y'
verwendet haben, um automatisch das aktuelle Datum zu erhalten. Dadurch können Sie Sicherungen im Verzeichnis wie /var/backups/10-29-20/
haben, was besonders praktisch ist, um Sicherungen zu automatisieren.
Zu diesem Zeitpunkt haben Sie eine vollständige Sicherung der Datenbank newdb
im Verzeichnis /var/backups/mongobackups/10-29-20/newdb/
. Diese Sicherung enthält alles, um die Datenbank newdb
ordnungsgemäß wiederherzustellen und ihre sogenannte „Treue“ zu erhalten.
Als allgemeine Regel sollten Sie regelmäßige Sicherungen erstellen, vorzugsweise wenn der Server am wenigsten belastet ist. Sie können also den Befehl mongodump
als Cron-Job einrichten, damit er regelmäßig ausgeführt wird, zum Beispiel jeden Tag um 03:03 Uhr morgens.
Um dies zu erreichen, öffnen Sie crontab
, den Editor von Cron:
Wenn Sie sudo crontab
ausführen, bearbeiten Sie die Cron-Jobs für den Root-Benutzer. Dies wird empfohlen, da die Cron-Jobs für Ihren Benutzer möglicherweise nicht ordnungsgemäß ausgeführt werden, insbesondere wenn Ihr Sudo-Profil eine Passwortüberprüfung erfordert.
Innerhalb des Cron-Job-Prompts fügen Sie den folgenden mongodump
-Befehl ein:
In dem obigen Befehl lassen wir das Argument --db
absichtlich aus, weil Sie in der Regel möchten, dass alle Ihre Datenbanken gesichert werden. Außerdem muss das Sonderzeichen %
maskiert werden, um der Cron-Syntax zu entsprechen.
Je nach Größe Ihrer MongoDB-Datenbanken kann Ihnen bald der Speicherplatz ausgehen, wenn zu viele Backups vorhanden sind. Daher wird auch empfohlen, die alten Backups regelmäßig zu löschen oder zu komprimieren.
Zum Beispiel können Sie mit dem folgenden Bash-Befehl alle Backups löschen, die älter als sieben Tage sind:
Ähnlich wie der vorherige mongodump
-Befehl können Sie auch dies als Cron-Job hinzufügen. Er sollte kurz vor dem Start des nächsten Backups ausgeführt werden; für den Job um 03:03 Uhr wird diese Löschung um 03:01 Uhr ausgeführt. Öffnen Sie erneut die Crontab:
Fügen Sie die folgende Zeile ein:
Speichern und schließen Sie die Datei.
Das Abschließen aller Aufgaben in diesem Schritt stellt eine ordnungsgemäße Backup-Lösung für Ihre MongoDB-Datenbanken sicher. Als nächstes stellen Sie die Datenbank wieder her.
Schritt 3 — Verwendung von mongorestore
zum Wiederherstellen und Migrieren einer MongoDB-Datenbank
Wenn Sie Ihre MongoDB-Datenbank aus einem früheren Backup wiederherstellen, haben Sie eine exakte Kopie Ihrer MongoDB-Informationen zu einem bestimmten Zeitpunkt, einschließlich aller Indizes und Datentypen, was besonders nützlich ist, wenn Sie Ihre MongoDB-Datenbanken migrieren möchten. Für die Wiederherstellung von MongoDB verwenden wir den Befehl mongorestore
, der mit den binären Backups arbeitet, die mongodump
erstellt.
Lassen Sie uns unsere Beispiele mit der Datenbank newdb
fortsetzen und sehen, wie wir sie aus dem zuvor erstellten Backup wiederherstellen können. Zuerst geben wir den Namen der Datenbank mit dem Argument --nsInclude
an. Wir verwenden newdb.*
, um alle Sammlungen wiederherzustellen. Um nur eine einzelne Sammlung wie restaurants
wiederherzustellen, verwenden Sie stattdessen newdb.restaurants
.
Dann stellen wir sicher, dass die Ziel-Datenbank zuerst gelöscht wird, damit das Backup in einer sauberen Datenbank wiederhergestellt wird, indem wir --drop
verwenden. Als letzten Argument geben wir das Verzeichnis des letzten Backups an, das ungefähr so aussehen wird: /var/backups/mongobackups/10-29-20/newdb/
.
Sobald Sie ein zeitgesteuertes Backup haben, können Sie es mit diesem Befehl wiederherstellen (aktualisieren Sie das Datum entsprechend Ihrem):
Sie werden eine Ausgabe wie diese sehen:
Output2020-10-29T19:25:45.825+0000 the --db and --collection args should only be used when restoring from a BSON file. Other uses are deprecated and will not exist in the future; use --nsInclude instead
2020-10-29T19:25:45.826+0000 building a list of collections to restore from /var/backups/mongobackups/10-29-20/newdb dir
2020-10-29T19:25:45.829+0000 reading metadata for newdb.restaurants from /var/backups/mongobackups/10-29-20/newdb/restaurants.metadata.json
2020-10-29T19:25:45.834+0000 restoring newdb.restaurants from /var/backups/mongobackups/10-29-20/newdb/restaurants.bson
2020-10-29T19:25:46.130+0000 no indexes to restore
2020-10-29T19:25:46.130+0000 finished restoring newdb.restaurants (25359 documents)
2020-10-29T19:25:46.130+0000 done
Im obigen Fall stellen wir die Daten auf demselben Server wieder her, auf dem wir das Backup erstellt haben. Wenn Sie die Daten auf einen anderen Server migrieren und dieselbe Technik verwenden möchten, sollten Sie das Backup-Verzeichnis kopieren, das in unserem Fall /var/backups/mongobackups/10-29-20/newdb/
ist.
Fazit
Sie haben nun einige wichtige Aufgaben im Zusammenhang mit dem Sichern, Wiederherstellen und Migrieren Ihrer MongoDB-Datenbanken durchgeführt. Kein Produktions-MongoDB-Server sollte jemals ohne eine zuverlässige Backup-Strategie laufen, wie sie hier beschrieben wird.
Sie finden weitere Anleitungen zur Konfiguration und Verwendung von MongoDB in diesen DigitalOcean-Community-Artikeln. Wir ermutigen Sie außerdem, die offizielle MongoDB-Dokumentation zu überprüfen, da sie eine großartige Ressource für die Möglichkeiten ist, die MongoDB bietet.