There are several ways to back up a database in MongoDB. One quick way to back up a database is to use the mongodump
tool.
mongodump
reads data from a MongoDB database and creates high fidelity BSON files which the mongorestore
utitlity can use to restore a MongoDB database.
With mongodump
, you can back up a collection, a database, or all databases.
Check for MongoDB Database Tools
mongodump
is part of the MongoDB Database Tools package. The MongoDB Database Tools are a suite of command-line utilities for working with MongoDB.
You may or may not have the MongoDB Database Tools/mongodump
installed. Try running the following command in your Terminal or Command Prompt to check:
mongodump --version
If you don’t have it, you can use the installation instructions over at the MongoDB website to install it on to your system.
Where to Run the Commands?
You need to run mongodump
commands from your system’s command line (e.g. a new Terminal or Command Prompt window).
Don’t run them from the mongo
shell.
Back Up All Databases
To back up all databases and collections in the local instance running on the default port 27017, use the mongodump
command without any arguments.
mongodump
Running the above code dumps all databases to a folder called dump/
.
Note that it excludes the local
and config
databases.
Also note that mongodump
only captures the documents in the database. When you do a restore, mongorestore
or mongod
must rebuild the indexes after restoring data.
Here’s what the files look like in the dump/
folder.
tree dump
Result:
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
Those files are obviously specific to my MongoDB installation, which contains test databases. In my case, 3 databases were dumped: PetHotel
, admin
, and krankykranes
.
Back Up to a Specific Location
You can use --out
or -o
to specify a location to put the files for the dumped databases.
Example:
mongodump --out=data/backups/
Or:
mongodump -o=data/backups/
In this case, each database folder is output directly into the data/backups/
folder (i.e. there’s no /dump/
folder).
Back Up a Specific Database
You can use the --db
parameter to specify a database to back up.
mongodump --db=krankykranes
This dumps the krankykranes
database to the default dump/
folder.
Back Up a Specific Collection
You can use --collection
or -c
to specify a collection to back up.
Example:
mongodump --db=krankykranes --collection=products
Or:
mongodump --db=krankykranes -c=products
This dumps the products
collection to the dump/krankykranes
folder.
Excluding Collections
You can also use the --excludeCollection
parameter to specify a specific collection to exclude from the backup (i.e. not include in the backup).
Example:
mongodump --db=PetHotel --excludeCollection=employees
This dumps all collections from the PetHotel
database except for the employees
collection.
To exclude more than one collection, use a separate --excludeCollection
parameter for each collection that you want to exclude.
Example:
mongodump --db=PetHotel --excludeCollection=employees --excludeCollection=students
That excludes the employees
and students
collections from the backup.
You can also use the --excludeCollectionsWithPrefix
parameter to exclude collections with a given prefix.
mongodump --db=PetHotel --excludeCollectionsWithPrefix=p
That dumps all collections except those that start with the letter p
.
The following one excludes all collections that start with pet
.
mongodump --db=PetHotel --excludeCollectionsWithPrefix=pet
You can use multiple --excludeCollectionsWithPrefix
arguments to exclude collections with multiple prefixes.
Example:
mongodump --db=PetHotel --excludeCollectionsWithPrefix=p --excludeCollectionsWithPrefix=s
Compress the Output
You can use the --gzip
parameter to compress the output.
mongodump --gzip --db=krankykranes
This compresses the individual files.
tree dump
Result:
dump
└── krankykranes
├── employees.bson.gz
├── employees.metadata.json.gz
├── products.bson.gz
└── products.metadata.json.gz
We can see that all files have the .gz
extension.
When outputting to an archive file or the standard out stream, the --gzip
option compresses the archive file or the data output to the stream.
Convert Views to Collections
You can use the --viewsAsCollections
parameter to export read-only views as collections.
mongodump --db=PetHotel --viewsAsCollections
When you export a view as a collection, mongodump
produces a BSON file containing the documents in the view. If you use mongorestore
to restore the produced BSON file, the view will be restored as a collection.
Without using this argument, mongodump
exports each view’s metadata. If you include a view’s metadata file in a mongorestore
operation, the view is recreated.
Using --viewsAsCollections
also omits all standard collections. Therefore, when I run the above code, my dump/
folder structure looks like this:
tree dump
Result:
dump
└── PetHotel
├── pettypes.bson
└── pettypes.metadata.json
In my PetHotel
database, I have a view called pettypes
. When I export this as a view, only the metadata is exported. But when I convert it to a collection, a pettypes.bson
file is created which wouldn’t be there if I had exported the view as a view.
Here’s what happens if I export that view without converting it to a collection.
mongodump --db=PetHotel --collection=pettypes
Then run the tree command, to get the folder structure.
tree dump
Result:
dump └── PetHotel └── pettypes.metadata.json
So we can see that just the metadata for the view is dumped.
Quiet Mode
You can use the --quiet
parameter to limit the output in your Terminal or Command Prompt window.
mongodump --quiet
Without using this, you’ll probably see a big list of views, collections, etc that are backed up.
Verbose Mode
On the flip side, you can use the --verbose
or -v
parameters to increase the output in your Terminal or Command Prompt window.
mongodump --verbose
You can increase the verbosity by repeating the -v
form multiple times.
Example:
mongodump -vvvv
Running that on my system significantly increased the verbosity.
Backup Query Results
You can use the --query
or -q
parameters to dump the result of a query.
Example:
mongodump --db=PetHotel --collection=pets --query='{ "type": "Dog" }'
When doing this, surround the query with single quotes. You can use double quotes for the fields.
Archives & Standard Output
You can use the --archive
or parameter to write the output to a specified archive file or, if the archive file is unspecified, to the standard output (stdout
) stream so that you can pipe to another process.
Example of outputting to an archive file:
mongodump --archive=PetHotel.20201230.archive --db=PetHotel
In the next example, I write to the standard output stream, then pipe to mongorestore
:
mongodump --archive --db=PetHotel --collection=pets --query='{ "type": "Dog" }' | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHotel.dogs'
That results in a new collection called dogs
appearing in the PetHotel
database (and the collection only contains documents that have a type
field with a value of dog
).
Access Control
The previous examples were done on the local machine using the default port. This meant that we were able to run mongodump
without specifying things like --host
, --port
, --username
, etc.
Here’s an example that uses those parameters to authenticate as homer
:
mongodump --host=myhost.example.com --port=37017 --username=homer --authenticationDatabase=admin --out=/backups/mongodump-2020-12-30
We could have also used the --password
parameter, but we didn’t. If you pass --user
but not --password
, you’ll be prompted for the password.
More Information about mongodump
The mongodump
utility accepts plenty of other useful parameters, and there are also various factors to consider when using it as part of a backup and recovery strategy.
See the mongodump
documentation on the MongoDB website for more info.
Other Options
mongodump
and mongorestore
are simple and efficient tools for backing up and restoring small MongoDB deployments, but are not ideal for capturing backups of larger systems.
See MongoDB Backup Methods on the MongoDB website for other methods for backing up your MongoDB databases.