Er zijn verschillende manieren om een back-up te maken van een database in MongoDB. Een snelle manier om een back-up van een database te maken, is door de mongodump
. te gebruiken gereedschap.
mongodump
leest gegevens uit een MongoDB-database en maakt high-fidelity BSON-bestanden die de mongorestore
hulpprogramma kan gebruiken om een MongoDB-database te herstellen.
Met mongodump
, kunt u een back-up maken van een verzameling, een database of alle databases.
Controleer op MongoDB Database Tools
mongodump
maakt deel uit van het MongoDB Database Tools-pakket. De MongoDB Database Tools zijn een reeks opdrachtregelhulpprogramma's voor het werken met MongoDB.
Je hebt misschien wel of niet de MongoDB Database Tools/mongodump
geïnstalleerd. Probeer het volgende commando uit te voeren in uw Terminal of Command Prompt om te controleren:
mongodump --version
Als je het niet hebt, kun je de installatie-instructies op de MongoDB-website gebruiken om het op je systeem te installeren.
Waar moeten de opdrachten worden uitgevoerd?
U moet mongodump
. uitvoeren opdrachten vanaf de opdrachtregel van uw systeem (bijvoorbeeld een nieuw Terminal- of opdrachtpromptvenster).
Voer ze niet uit vanuit de mongo
schelp.
Back-up van alle databases
Gebruik de mongodump
om een back-up te maken van alle databases en verzamelingen in de lokale instantie die op de standaardpoort 27017 wordt uitgevoerd. commando zonder enige argumenten.
mongodump
Het uitvoeren van de bovenstaande code dumpt alle databases naar een map met de naam dump/
.
Merk op dat het de local
. uitsluit en config
databases.
Merk ook op dat mongodump
legt alleen de documenten in de database vast. Wanneer u een herstel uitvoert, mongorestore
of mongod
moet de indexen opnieuw opbouwen na het herstellen van gegevens.
Zo zien de bestanden eruit in de dump/
map.
tree dump
Resultaat:
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
Die bestanden zijn duidelijk specifiek voor mijn MongoDB-installatie, die testdatabases bevat. In mijn geval werden 3 databases gedumpt:PetHotel
, admin
, en krankykranes
.
Back-up naar een specifieke locatie
U kunt --out
. gebruiken of -o
om een locatie op te geven om de bestanden voor de gedumpte databases te plaatsen.
Voorbeeld:
mongodump --out=data/backups/
Of:
mongodump -o=data/backups/
In dit geval wordt elke databasemap rechtstreeks uitgevoerd naar de data/backups/
map (d.w.z. er is geen /dump/
map).
Back-up van een specifieke database
U kunt de --db
. gebruiken parameter om een database op te geven waarvan u een back-up wilt maken.
mongodump --db=krankykranes
Dit dumpt de krankykranes
database naar de standaard dump/
map.
Back-up van een specifieke verzameling
U kunt --collection
. gebruiken of -c
om een verzameling op te geven waarvan u een back-up wilt maken.
Voorbeeld:
mongodump --db=krankykranes --collection=products
Of:
mongodump --db=krankykranes -c=products
Dit dumpt de products
verzameling naar de dump/krankykranes
map.
Exclusief collecties
U kunt ook de --excludeCollection
. gebruiken parameter om een specifieke verzameling op te geven die moet worden uitgesloten van de back-up (d.w.z. niet opnemen in de back-up).
Voorbeeld:
mongodump --db=PetHotel --excludeCollection=employees
Dit dumpt alle collecties van het PetHotel
database behalve de employees
collectie.
Om meer dan één verzameling uit te sluiten, gebruikt u een aparte --excludeCollection
parameter voor elke verzameling die u wilt uitsluiten.
Voorbeeld:
mongodump --db=PetHotel --excludeCollection=employees --excludeCollection=students
Dat is exclusief de employees
en students
verzamelingen van de back-up.
U kunt ook de --excludeCollectionsWithPrefix
. gebruiken parameter om verzamelingen met een bepaald voorvoegsel uit te sluiten.
mongodump --db=PetHotel --excludeCollectionsWithPrefix=p
Dat dumpt alle collecties behalve die die beginnen met de letter p
.
De volgende sluit alle collecties uit die beginnen met pet
.
mongodump --db=PetHotel --excludeCollectionsWithPrefix=pet
U kunt meerdere --excludeCollectionsWithPrefix
. gebruiken argumenten om collecties met meerdere voorvoegsels uit te sluiten.
Voorbeeld:
mongodump --db=PetHotel --excludeCollectionsWithPrefix=p --excludeCollectionsWithPrefix=s
Comprimeer de uitvoer
U kunt de --gzip
. gebruiken parameter om de uitvoer te comprimeren.
mongodump --gzip --db=krankykranes
Dit comprimeert de individuele bestanden.
tree dump
Resultaat:
dump
└── krankykranes
├── employees.bson.gz
├── employees.metadata.json.gz
├── products.bson.gz
└── products.metadata.json.gz
We kunnen zien dat alle bestanden de .gz
. hebben extensie.
Bij uitvoer naar een archiefbestand of de standaard uitstroom, wordt de --gzip
optie comprimeert het archiefbestand of de gegevensuitvoer naar de stream.
Converteer weergaven naar collecties
U kunt de --viewsAsCollections
. gebruiken parameter om alleen-lezen weergaven als verzamelingen te exporteren.
mongodump --db=PetHotel --viewsAsCollections
Wanneer u een weergave als verzameling exporteert, mongodump
produceert een BSON-bestand met de documenten in de weergave. Als u mongorestore
. gebruikt om het geproduceerde BSON-bestand te herstellen, wordt de weergave hersteld als een verzameling.
Zonder dit argument te gebruiken, mongodump
exporteert de metadata van elke weergave. Als u het metadatabestand van een weergave opneemt in een mongorestore
bewerking, wordt de weergave opnieuw gemaakt.
--viewsAsCollections
gebruiken laat ook alle standaardcollecties weg. Daarom, wanneer ik de bovenstaande code uitvoer, mijn dump/
mappenstructuur ziet er als volgt uit:
tree dump
Resultaat:
dump
└── PetHotel
├── pettypes.bson
└── pettypes.metadata.json
In mijn PetHotel
database, ik heb een weergave genaamd pettypes
. Wanneer ik dit als een weergave exporteer, worden alleen de metadata geëxporteerd. Maar als ik het naar een verzameling converteer, wordt een pettypes.bson
bestand wordt gemaakt dat er niet zou zijn als ik de weergave als een weergave had geëxporteerd.
Dit is wat er gebeurt als ik die weergave exporteer zonder deze naar een verzameling te converteren.
mongodump --db=PetHotel --collection=pettypes
Voer vervolgens het tree-commando uit om de mappenstructuur te krijgen.
tree dump
Resultaat:
dump └── PetHotel └── pettypes.metadata.json
We kunnen dus zien dat alleen de metagegevens voor de weergave worden gedumpt.
Stille modus
U kunt de --quiet
. gebruiken parameter om de uitvoer in uw Terminal- of opdrachtpromptvenster te beperken.
mongodump --quiet
Zonder dit te gebruiken, ziet u waarschijnlijk een grote lijst met weergaven, verzamelingen, enz. waarvan een back-up is gemaakt.
Uitgebreide modus
Aan de andere kant kun je de --verbose
. gebruiken of -v
parameters om te verhogen de uitvoer in uw Terminal- of opdrachtpromptvenster.
mongodump --verbose
U kunt de breedsprakigheid vergroten door de -v
. te herhalen meerdere keren vormen.
Voorbeeld:
mongodump -vvvv
Door dat op mijn systeem te gebruiken, werd de breedsprakigheid aanzienlijk vergroot.
Resultaten van back-upquery
U kunt de --query
. gebruiken of -q
parameters om het resultaat van een zoekopdracht te dumpen.
Voorbeeld:
mongodump --db=PetHotel --collection=pets --query='{ "type": "Dog" }'
Wanneer u dit doet, omringt u de query met enkele aanhalingstekens. U kunt dubbele aanhalingstekens gebruiken voor de velden.
Archief en standaarduitvoer
U kunt het --archive
. gebruiken of parameter om de uitvoer naar een gespecificeerd archiefbestand te schrijven of, als het archiefbestand niet gespecificeerd is, naar de standaarduitvoer (stdout
) stream zodat u naar een ander proces kunt doorsluizen.
Voorbeeld van uitvoer naar een archiefbestand:
mongodump --archive=PetHotel.20201230.archive --db=PetHotel
In het volgende voorbeeld schrijf ik naar de standaard uitvoerstroom en pijp ik vervolgens naar mongorestore
:
mongodump --archive --db=PetHotel --collection=pets --query='{ "type": "Dog" }' | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHotel.dogs'
Dat resulteert in een nieuwe collectie genaamd dogs
verschijnen in het PetHotel
database (en de collectie bevat alleen documenten met een type
veld met een waarde van dog
).
Toegangscontrole
De vorige voorbeelden zijn gedaan op de lokale computer met behulp van de standaardpoort. Dit betekende dat we mongodump
. konden uitvoeren zonder dingen op te geven zoals --host
, --port
, --username
, enz.
Hier is een voorbeeld dat deze parameters gebruikt om te authenticeren als homer
:
mongodump --host=myhost.example.com --port=37017 --username=homer --authenticationDatabase=admin --out=/backups/mongodump-2020-12-30
We hadden ook de --password
. kunnen gebruiken parameter, maar dat deden we niet. Als u --user
pass doorgeeft maar niet --password
, wordt u om het wachtwoord gevraagd.
Meer informatie over mongodump
De mongodump
hulpprogramma accepteert tal van andere nuttige parameters, en er zijn ook verschillende factoren waarmee u rekening moet houden wanneer u het gebruikt als onderdeel van een back-up- en herstelstrategie.
Zie de mongodump
documentatie op de MongoDB-website voor meer info.
Andere opties
mongodump
en mongorestore
zijn eenvoudige en efficiënte tools voor het maken van back-ups en het herstellen van kleine MongoDB-implementaties, maar zijn niet ideaal voor het vastleggen van back-ups van grotere systemen.
Zie MongoDB-back-upmethoden op de MongoDB-website voor andere methoden voor het maken van back-ups van uw MongoDB-databases.