Es gibt mehrere Möglichkeiten, eine Datenbank in MongoDB zu sichern. Eine schnelle Möglichkeit, eine Datenbank zu sichern, ist die Verwendung von mongodump
Werkzeug.
mongodump
liest Daten aus einer MongoDB-Datenbank und erstellt High-Fidelity-BSON-Dateien, die der mongorestore
Dienstprogramm kann verwendet werden, um eine MongoDB-Datenbank wiederherzustellen.
Mit mongodump
können Sie eine Sammlung, eine Datenbank oder alle Datenbanken sichern.
Suchen Sie nach MongoDB-Datenbanktools
mongodump
ist Teil des MongoDB Database Tools-Pakets. Die MongoDB-Datenbanktools sind eine Reihe von Befehlszeilendienstprogrammen für die Arbeit mit MongoDB.
Möglicherweise verfügen Sie über die MongoDB-Datenbanktools/mongodump
Eingerichtet. Versuchen Sie, den folgenden Befehl in Ihrem Terminal oder Ihrer Eingabeaufforderung auszuführen, um dies zu überprüfen:
mongodump --version
Wenn Sie es nicht haben, können Sie die Installationsanweisungen auf der MongoDB-Website verwenden, um es auf Ihrem System zu installieren.
Wo sollen die Befehle ausgeführt werden?
Sie müssen mongodump
ausführen Befehle über die Befehlszeile Ihres Systems (z. B. ein neues Terminal- oder Eingabeaufforderungsfenster).
Führen Sie sie nicht vom mongo
aus Hülse.
Alle Datenbanken sichern
Um alle Datenbanken und Sammlungen in der lokalen Instanz zu sichern, die auf dem Standardport 27017 ausgeführt wird, verwenden Sie mongodump
Befehl ohne Argumente.
mongodump
Das Ausführen des obigen Codes sichert alle Datenbanken in einem Ordner namens dump/
.
Beachten Sie, dass es den local
ausschließt und config
Datenbanken.
Beachten Sie auch, dass mongodump
erfasst nur die Dokumente in der Datenbank. Wenn Sie eine Wiederherstellung durchführen, mongorestore
oder mongod
müssen die Indizes nach dem Wiederherstellen von Daten neu erstellen.
So sehen die Dateien im dump/
aus Ordner.
tree dump
Ergebnis:
dump ├── PetHotel │ ├── employees.bson │ ├── employees.metadata.json │ ├── owners.bson │ ├── owners.metadata.json │ ├── pets.bson │ ├── pets.metadata.json │ ├── pettypes.metadata.json │ ├── players.bson │ ├── players.metadata.json │ ├── scores.bson │ ├── scores.metadata.json │ ├── students.bson │ └── students.metadata.json ├── admin │ ├── system.users.bson │ ├── system.users.metadata.json │ ├── system.version.bson │ └── system.version.metadata.json └── krankykranes ├── employees.bson ├── employees.metadata.json ├── products.bson └── products.metadata.json
Diese Dateien sind offensichtlich spezifisch für meine MongoDB-Installation, die Testdatenbanken enthält. In meinem Fall wurden 3 Datenbanken ausgegeben:PetHotel
, admin
, und krankykranes
.
Sicherung an einem bestimmten Ort
Sie können --out
verwenden oder -o
um einen Ort anzugeben, an dem die Dateien für die gedumpten Datenbanken abgelegt werden.
Beispiel:
mongodump --out=data/backups/
Oder:
mongodump -o=data/backups/
In diesem Fall wird jeder Datenbankordner direkt in die data/backups/
ausgegeben Ordner (d.h. es gibt kein /dump/
Ordner).
Sichere eine bestimmte Datenbank
Sie können den --db
verwenden Parameter, um eine zu sichernde Datenbank anzugeben.
mongodump --db=krankykranes
Dies gibt die krankykranes
aus Datenbank zum Standard dump/
Ordner.
Eine bestimmte Sammlung sichern
Sie können --collection
verwenden oder -c
um eine zu sichernde Sammlung anzugeben.
Beispiel:
mongodump --db=krankykranes --collection=products
Oder:
mongodump --db=krankykranes -c=products
Dies gibt die products
aus Abholung zum dump/krankykranes
Ordner.
Sammlungen ausgenommen
Sie können auch die --excludeCollection
verwenden Parameter, um eine bestimmte Sammlung anzugeben, die von der Sicherung ausgeschlossen werden soll (d. h. nicht in die Sicherung eingeschlossen).
Beispiel:
mongodump --db=PetHotel --excludeCollection=employees
Dadurch werden alle Sammlungen von PetHotel
ausgegeben Datenbank mit Ausnahme der employees
Sammlung.
Um mehr als eine Sammlung auszuschließen, verwenden Sie eine separate --excludeCollection
Parameter für jede Sammlung, die Sie ausschließen möchten.
Beispiel:
mongodump --db=PetHotel --excludeCollection=employees --excludeCollection=students
Davon ausgenommen sind die employees
und students
Sammlungen aus dem Backup.
Sie können auch --excludeCollectionsWithPrefix
verwenden Parameter zum Ausschließen von Sammlungen mit einem bestimmten Präfix.
mongodump --db=PetHotel --excludeCollectionsWithPrefix=p
Dadurch werden alle Sammlungen außer denen ausgegeben, die mit dem Buchstaben p
beginnen .
Die folgende schließt alle Sammlungen aus, die mit pet
beginnen .
mongodump --db=PetHotel --excludeCollectionsWithPrefix=pet
Sie können mehrere --excludeCollectionsWithPrefix
verwenden Argumente zum Ausschließen von Sammlungen mit mehreren Präfixen.
Beispiel:
mongodump --db=PetHotel --excludeCollectionsWithPrefix=p --excludeCollectionsWithPrefix=s
Ausgabe komprimieren
Sie können den --gzip
verwenden Parameter, um die Ausgabe zu komprimieren.
mongodump --gzip --db=krankykranes
Dadurch werden die einzelnen Dateien komprimiert.
tree dump
Ergebnis:
dump
└── krankykranes
├── employees.bson.gz
├── employees.metadata.json.gz
├── products.bson.gz
└── products.metadata.json.gz
Wir können sehen, dass alle Dateien den .gz
haben Erweiterung.
Bei der Ausgabe in eine Archivdatei oder den Standardausgabestream wird die Datei --gzip
Option komprimiert die Archivdatei oder die Datenausgabe in den Stream.
Aufrufe in Sammlungen umwandeln
Sie können die --viewsAsCollections
verwenden Parameter, um schreibgeschützte Ansichten als Sammlungen zu exportieren.
mongodump --db=PetHotel --viewsAsCollections
Wenn Sie eine Ansicht als Sammlung exportieren, wird mongodump
erzeugt eine BSON-Datei, die die Dokumente in der Ansicht enthält. Wenn Sie mongorestore
verwenden Um die erstellte BSON-Datei wiederherzustellen, wird die Ansicht als Sammlung wiederhergestellt.
Ohne dieses Argument zu verwenden, mongodump
exportiert die Metadaten jeder Ansicht. Wenn Sie die Metadatendatei einer Ansicht in einen mongorestore
einschließen Vorgang wird die Ansicht neu erstellt.
Verwenden von --viewsAsCollections
lässt auch alle Standardsammlungen weg. Wenn ich den obigen Code ausführe, wird daher mein dump/
Ordnerstruktur sieht so aus:
tree dump
Ergebnis:
dump
└── PetHotel
├── pettypes.bson
└── pettypes.metadata.json
In meinem PetHotel
Datenbank habe ich eine Ansicht namens pettypes
. Wenn ich dies als Ansicht exportiere, werden nur die Metadaten exportiert. Aber wenn ich es in eine Sammlung umwandle, eine pettypes.bson
Datei erstellt, die nicht vorhanden wäre, wenn ich die Ansicht als Ansicht exportiert hätte.
Folgendes passiert, wenn ich diese Ansicht exportiere, ohne sie in eine Sammlung zu konvertieren.
mongodump --db=PetHotel --collection=pettypes
Führen Sie dann den Baumbefehl aus, um die Ordnerstruktur zu erhalten.
tree dump
Ergebnis:
dump └── PetHotel └── pettypes.metadata.json
Wir können also sehen, dass nur die Metadaten für die Ansicht ausgegeben werden.
Leiser Modus
Sie können den --quiet
verwenden Parameter, um die Ausgabe in Ihrem Terminal- oder Eingabeaufforderungsfenster zu begrenzen.
mongodump --quiet
Ohne dies zu verwenden, sehen Sie wahrscheinlich eine große Liste von Ansichten, Sammlungen usw., die gesichert werden.
Ausführlicher Modus
Auf der anderen Seite können Sie --verbose
verwenden oder -v
Parameter erhöhen die Ausgabe in Ihrem Terminal- oder Eingabeaufforderungsfenster.
mongodump --verbose
Sie können die Ausführlichkeit erhöhen, indem Sie das -v
wiederholen mehrfach bilden.
Beispiel:
mongodump -vvvv
Das Ausführen auf meinem System hat die Ausführlichkeit erheblich erhöht.
Abfrageergebnisse sichern
Sie können die --query
verwenden oder -q
Parameter, um das Ergebnis einer Abfrage auszugeben.
Beispiel:
mongodump --db=PetHotel --collection=pets --query='{ "type": "Dog" }'
Schließen Sie dabei die Abfrage in einfache Anführungszeichen ein. Sie können die Felder in doppelte Anführungszeichen setzen.
Archive &Standardausgabe
Sie können das --archive
verwenden oder Parameter, um die Ausgabe in eine angegebene Archivdatei oder, wenn die Archivdatei nicht angegeben ist, in die Standardausgabe (stdout
) streamen, sodass Sie zu einem anderen Prozess leiten können.
Beispiel für die Ausgabe in eine Archivdatei:
mongodump --archive=PetHotel.20201230.archive --db=PetHotel
Im nächsten Beispiel schreibe ich in den Standardausgabestream und leite dann an mongorestore
:
mongodump --archive --db=PetHotel --collection=pets --query='{ "type": "Dog" }' | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHotel.dogs'
Daraus ergibt sich eine neue Sammlung namens dogs
im PetHotel
erscheinen Datenbank (und die Sammlung enthält nur Dokumente, die einen type
haben Feld mit dem Wert dog
).
Zugriffskontrolle
Die vorherigen Beispiele wurden auf dem lokalen Computer unter Verwendung des Standardports durchgeführt. Das bedeutete, dass wir mongodump
ausführen konnten ohne Dinge wie --host
anzugeben , --port
, --username
usw.
Hier ist ein Beispiel, das diese Parameter verwendet, um sich als homer
zu authentifizieren :
mongodump --host=myhost.example.com --port=37017 --username=homer --authenticationDatabase=admin --out=/backups/mongodump-2020-12-30
Wir hätten auch das --password
verwenden können Parameter, aber wir haben es nicht getan. Wenn Sie --user
übergeben aber nicht --password
, werden Sie nach dem Passwort gefragt.
Weitere Informationen über Mongodump
Der mongodump
Utility akzeptiert viele andere nützliche Parameter, und es gibt auch verschiedene Faktoren zu berücksichtigen, wenn es als Teil einer Sicherungs- und Wiederherstellungsstrategie verwendet wird.
Siehe mongodump
Dokumentation auf der MongoDB-Website für weitere Informationen.
Andere Optionen
mongodump
und mongorestore
sind einfache und effiziente Tools zum Sichern und Wiederherstellen kleiner MongoDB-Bereitstellungen, sind jedoch nicht ideal zum Erfassen von Sicherungen größerer Systeme.
Weitere Methoden zum Sichern Ihrer MongoDB-Datenbanken finden Sie unter MongoDB-Sicherungsmethoden auf der MongoDB-Website.