Det finns flera sätt att säkerhetskopiera en databas i MongoDB. Ett snabbt sätt att säkerhetskopiera en databas är att använda mongodump
verktyg.
mongodump
läser data från en MongoDB-databas och skapar high fidelity BSON-filer som mongorestore
utility kan använda för att återställa en MongoDB-databas.
Med mongodump
, kan du säkerhetskopiera en samling, en databas eller alla databaser.
Sök efter MongoDB Database Tools
mongodump
är en del av MongoDB Database Tools-paketet. MongoDB Database Tools är en uppsättning kommandoradsverktyg för att arbeta med MongoDB.
Du har eller kanske inte har MongoDB Database Tools/mongodump
installerat. Prova att köra följande kommando i din terminal eller kommandotolk för att kontrollera:
mongodump --version
Om du inte har det kan du använda installationsinstruktionerna på MongoDB-webbplatsen för att installera det på ditt system.
Var kör man kommandona?
Du måste köra mongodump
kommandon från ditt systems kommandorad (t.ex. ett nytt terminal- eller kommandotolkfönster).
Kör dem inte från mongo
skal.
Säkerhetskopiera alla databaser
För att säkerhetskopiera alla databaser och samlingar i den lokala instansen som körs på standardporten 27017, använd mongodump
kommando utan några argument.
mongodump
Att köra ovanstående kod dumpar alla databaser till en mapp som heter dump/
.
Observera att den exkluderar local
och config
databaser.
Observera också att mongodump
fångar endast dokumenten i databasen. När du gör en återställning, mongorestore
eller mongod
måste bygga om indexen efter att ha återställt data.
Så här ser filerna ut i dump/
mapp.
tree dump
Resultat:
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
Dessa filer är uppenbarligen specifika för min MongoDB-installation, som innehåller testdatabaser. I mitt fall dumpades 3 databaser:PetHotel
, admin
, och krankykranes
.
Säkerhetskopiera till en specifik plats
Du kan använda --out
eller -o
för att ange en plats för att placera filerna för de dumpade databaserna.
Exempel:
mongodump --out=data/backups/
Eller:
mongodump -o=data/backups/
I det här fallet matas varje databasmapp direkt till data/backups/
mapp (dvs. det finns ingen /dump/
mapp).
Säkerhetskopiera en specifik databas
Du kan använda --db
parameter för att ange en databas som ska säkerhetskopieras.
mongodump --db=krankykranes
Detta dumpar krankykranes
databas till standardvärdet dump/
mapp.
Säkerhetskopiera en specifik samling
Du kan använda --collection
eller -c
för att ange en samling som ska säkerhetskopieras.
Exempel:
mongodump --db=krankykranes --collection=products
Eller:
mongodump --db=krankykranes -c=products
Detta dumpar products
samling till dump/krankykranes
mapp.
Uteslut samlingar
Du kan också använda --excludeCollection
parameter för att ange en specifik samling som ska exkluderas från säkerhetskopian (dvs. inte inkludera i säkerhetskopian).
Exempel:
mongodump --db=PetHotel --excludeCollection=employees
Detta dumpar alla samlingar från PetHotel
databas förutom employees
samling.
För att utesluta mer än en samling, använd en separat --excludeCollection
parameter för varje samling som du vill exkludera.
Exempel:
mongodump --db=PetHotel --excludeCollection=employees --excludeCollection=students
Det exkluderar employees
och students
samlingar från säkerhetskopian.
Du kan också använda --excludeCollectionsWithPrefix
parameter för att utesluta samlingar med ett givet prefix.
mongodump --db=PetHotel --excludeCollectionsWithPrefix=p
Det dumpar alla samlingar utom de som börjar med bokstaven p
.
Följande exkluderar alla samlingar som börjar med pet
.
mongodump --db=PetHotel --excludeCollectionsWithPrefix=pet
Du kan använda flera --excludeCollectionsWithPrefix
argument för att utesluta samlingar med flera prefix.
Exempel:
mongodump --db=PetHotel --excludeCollectionsWithPrefix=p --excludeCollectionsWithPrefix=s
Komprimera utdata
Du kan använda --gzip
parameter för att komprimera utdata.
mongodump --gzip --db=krankykranes
Detta komprimerar de enskilda filerna.
tree dump
Resultat:
dump
└── krankykranes
├── employees.bson.gz
├── employees.metadata.json.gz
├── products.bson.gz
└── products.metadata.json.gz
Vi kan se att alla filer har .gz
förlängning.
Vid utmatning till en arkivfil eller standardutströmmen, --gzip
alternativet komprimerar arkivfilen eller datautmatningen till strömmen.
Konvertera visningar till samlingar
Du kan använda --viewsAsCollections
parameter för att exportera skrivskyddade vyer som samlingar.
mongodump --db=PetHotel --viewsAsCollections
När du exporterar en vy som en samling, mongodump
producerar en BSON-fil som innehåller dokumenten i vyn. Om du använder mongorestore
för att återställa den producerade BSON-filen kommer vyn att återställas som en samling.
Utan att använda detta argument, mongodump
exporterar varje vys metadata. Om du inkluderar en vys metadatafil i en mongorestore
operation återskapas vyn.
Använder --viewsAsCollections
utelämnar också alla standardkollektioner. Därför, när jag kör ovanstående kod, min dump/
mappstrukturen ser ut så här:
tree dump
Resultat:
dump
└── PetHotel
├── pettypes.bson
└── pettypes.metadata.json
I mitt PetHotel
databas, jag har en vy som heter pettypes
. När jag exporterar detta som en vy är det bara metadata som exporteras. Men när jag konverterar den till en samling, en pettypes.bson
fil skapas som inte skulle finnas där om jag hade exporterat vyn som en vy.
Här är vad som händer om jag exporterar den vyn utan att konvertera den till en samling.
mongodump --db=PetHotel --collection=pettypes
Kör sedan trädkommandot för att få mappstrukturen.
tree dump
Resultat:
dump └── PetHotel └── pettypes.metadata.json
Så vi kan se att bara metadata för vyn dumpas.
Tyst läge
Du kan använda --quiet
parameter för att begränsa utdata i ditt terminal- eller kommandotolkfönster.
mongodump --quiet
Utan att använda detta kommer du förmodligen att se en stor lista över vyer, samlingar etc som säkerhetskopieras.
Verbose Mode
På baksidan kan du använda --verbose
eller -v
parametrar för att öka utdata i din terminal eller kommandotolksfönster.
mongodump --verbose
Du kan öka utförligheten genom att upprepa -v
form flera gånger.
Exempel:
mongodump -vvvv
Att köra det på mitt system ökade mängden avsevärt.
Resultat av säkerhetskopiering
Du kan använda --query
eller -q
parametrar för att dumpa resultatet av en fråga.
Exempel:
mongodump --db=PetHotel --collection=pets --query='{ "type": "Dog" }'
När du gör detta, omge frågan med enstaka citattecken. Du kan använda dubbla citattecken för fälten.
Arkiv och standardutdata
Du kan använda --archive
eller parameter för att skriva utdata till en specificerad arkivfil eller, om arkivfilen är ospecificerad, till standardutdata (stdout
) streama så att du kan gå vidare till en annan process.
Exempel på utmatning till en arkivfil:
mongodump --archive=PetHotel.20201230.archive --db=PetHotel
I nästa exempel skriver jag till standardutgångsströmmen och skickar sedan till mongorestore
:
mongodump --archive --db=PetHotel --collection=pets --query='{ "type": "Dog" }' | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHotel.dogs'
Det resulterar i en ny samling som heter dogs
visas i PetHotel
databas (och samlingen innehåller bara dokument som har en type
fält med värdet dog
).
Åtkomstkontroll
De tidigare exemplen gjordes på den lokala datorn med standardporten. Detta innebar att vi kunde köra mongodump
utan att ange saker som --host
, --port
, --username
, etc.
Här är ett exempel som använder dessa parametrar för att autentisera som homer
:
mongodump --host=myhost.example.com --port=37017 --username=homer --authenticationDatabase=admin --out=/backups/mongodump-2020-12-30
Vi kunde också ha använt --password
parameter, men det gjorde vi inte. Om du skickar --user
men inte --password
, kommer du att bli ombedd att ange lösenordet.
Mer information om mongodump
mongodump
verktyget accepterar många andra användbara parametrar, och det finns också olika faktorer att ta hänsyn till när du använder det som en del av en säkerhetskopierings- och återställningsstrategi.
Se mongodump
dokumentation på MongoDB-webbplatsen för mer information.
Andra alternativ
mongodump
och mongorestore
är enkla och effektiva verktyg för att säkerhetskopiera och återställa små MongoDB-distributioner, men är inte idealiska för att ta säkerhetskopior av större system.
Se MongoDB Backup Methods på MongoDB-webbplatsen för andra metoder för att säkerhetskopiera dina MongoDB-databaser.