This tutorial describes the process for creating backups and restoring data using the command-line utilities mongorestore and mongodump provided with MongoDB.
To restore a backup of your self-hosted deployment to a managed MongoDB Atlas deployment, see Seed with mongorestore.
For a fully-managed backup method, use Cloud Backups in MongoDB Atlas, which provide localized backup storage using the native snapshot functionality of the cluster's cloud service provider.
Considerations
Deployments
The mongorestore and mongodump utilities work with BSON data dumps, and are useful for creating backups of small deployments. For resilient and non-disruptive backups, use file system snapshots or block-level disk snapshots with Cloud Backups from MongoDB Atlas.
Note
Back Up Sharded Clusters with MongoDB Atlas
To use mongodump and mongorestore as a backup strategy for sharded clusters, see Back Up a Self-Managed Sharded Cluster with a Database Dump.
Sharded clusters can also use one of the following coordinated backup and restore processes, which maintain the atomicity guarantees of transactions across shards:
Performance Impacts
Because mongodump and mongorestore operate by interacting with a running mongod instance, they can impact the performance of your running database. Not only do the tools create traffic for a running database instance, they also force the database to read all data through memory. When MongoDB reads infrequently used data, it can evict more frequently accessed data, causing a deterioration in performance for the database's regular workload.
When backing up your data with MongoDB's tools, consider the following guidelines:
- Label files so that you can identify the contents of the backup as well as the point in time that the backup reflects.
- Use an alternative backup strategy such as Filesystem Snapshots or Cloud Backups in MongoDB Atlas if the performance impact of
mongodumpandmongorestoreis unacceptable for your use case. To ensure
mongodumpcan take a consistent backup of a replica set, you must either use the--oplogoption to capture writes received during backup operations or stop all writes to the replica set for the duration of the backup.For sharded cluster replica sets, see Back Up a Self-Managed Sharded Cluster with a Database Dump.
- Ensure that your backups are usable by restoring them to a test MongoDB deployment.
- To help reduce the likelihood of inconsistencies in a sharded cluster backup, you must stop the balancer, stop all write operations, and stop any schema transformations for the duration of the backup.
Tip
Backup Methods for a Self-Managed Deployment and MongoDB Atlas Cloud Backups for more information on backing up MongoDB instances. Additionally, consider the following reference documentation for the MongoDB Database Tools:
Output Format
mongorestore and mongodump can output data to an archive file, which is a single-file alternative to multiple BSON files. Archive files are special-purpose formats that support non-contiguous file writes. They enable concurrent backups from MongoDB, as well as restores to MongoDB. Using archive files optimizes disk I/O while backup and restore operations execute.
You can also output archive files to the standard output (stdout). Writing to the standard output allows for data migration over networks, reduced disk I/O footprint, and concurrency gains in both the MongoDB tools and your storage engine.
For more information on archive files, see the --archive option.
Stale Backups
Backups provide a snapshot of the current state of the database. When you restore from a backup, the restored database doesn't include any changes made after the backup was taken, which can result in data loss.
Procedures
Back Up a Database with mongodump
Note
Back Up Sharded Clusters with MongoDB Atlas
To use mongodump and mongorestore as a backup strategy for sharded clusters, see Back Up a Self-Managed Sharded Cluster with a Database Dump.
Sharded clusters can also use one of the following coordinated backup and restore processes, which maintain the atomicity guarantees of transactions across shards:
Exclude local Database
mongodump excludes the content of the local database in its output.
Required Access
To run mongodump against a MongoDB deployment that has access control enabled, you must have privileges that grant find action for each database to back up. The built-in backup role provides the required privileges to perform backup of any and all databases.
The backup role provides additional privileges to back up the system.profile collection that exists when running with database profiling.
Basic mongodump Operations
The mongodump utility backs up data by connecting to a running mongod.
The utility can create a backup for an entire server, database or collection, or can use a query to backup just part of a collection.
When you run mongodump without any arguments, the command connects to the MongoDB instance on the local system (e.g. localhost) on port 27017 and creates a database backup named dump/ in the current directory.
To backup data from a mongod instance running on the same machine and on the default port of 27017, use the following command:
mongodumpTo specify the host and port of the MongoDB instance, you can either:
Specify the hostname and port in the
--uristring, using either an SRV or standard connection string:mongodump --uri="mongodb+srv://username:password@cluster0.example.mongodb.net" <additional_options>Specify the hostname and port in the
--hoststring:mongodump --host="mongodb0.example.com:27017" <additional_options>Specify the hostname and port in the
--hostand--port:mongodump --host="mongodb0.example.com" --port=27017 <additional_options>mongodumpwill write BSON files that hold a copy of data accessible via themongodlistening on port27017of themongodb.example.nethost. See Create Backups from Non-LocalmongodInstances for more information.To specify a different output directory, you can use the
--out or -ooption:mongodump --out=/opt/backup/mongodump-1To limit the amount of data included in the database dump, you can specify
--dband--collectionas options tomongodump. For example:mongodump --collection=myCollection --db=testThis operation creates a dump of the collection named
myCollectionfrom the databasetestin adump/subdirectory of the current working directory.mongodumpoverwrites output files if they exist in the backup data folder. Before running themongodumpcommand multiple times, either ensure that you no longer need the files in the output folder (the default is thedump/folder) or rename the folders or files.Create Backups Using Oplogs
The
--oplogoption withmongodumpcollects the oplog entries and allows you to perform a backup on a live database. If you later restore the database from the backup, the database will be the same as it was when the backup process completed.With
--oplog,mongodumpcopies all the data from the source database as well as all of the oplog entries from the beginning to the end of the backup procedure. This operation, in conjunction withmongorestore --oplogReplay, allows you to restore a backup that reflects the specific moment in time that corresponds to whenmongodumpcompleted creating the dump file.Create Backups from Non-Local
mongodInstancesThe
--hostand--portoptions formongodumpallow you to connect to and backup from a remote host. Consider the following example:mongodump \
--host=mongodb1.example.net \
--port=3017 \
--username=user \
--password="pass" \
--out=/opt/backup/mongodump-1On any
mongodumpcommand you may, as above, specify username and password credentials to specify database authentication.Restore a Database with
mongorestoreNote
Back Up Sharded Clusters with MongoDB Atlas
To use
mongodumpandmongorestoreas a backup strategy for sharded clusters, see Back Up a Self-Managed Sharded Cluster with a Database Dump.Sharded clusters can also use one of the following coordinated backup and restore processes, which maintain the atomicity guarantees of transactions across shards:
Access Control
To restore data to a MongoDB deployment that has access control enabled, the
restorerole provides the necessary privileges to restore data from backups if the data does not includesystem.profilecollection data and you runmongorestorewithout the--oplogReplayoption.If the backup data includes
system.profilecollection data or you run with--oplogReplay, you need additional privileges:system.profileIf the backup data includes
system.profilecollection data and the target database does not contain thesystem.profilecollection,mongorestoreattempts to create the collection even though the program does not actually restoresystem.profiledocuments. As such, the user requires additional privileges to performcreateCollectionandconvertToCappedactions on thesystem.profilecollection for a database.Both the built-in roles
dbAdminanddbAdminAnyDatabaseprovide the additional privileges.--oplogReplayTo run with
--oplogReplay, create a user-defined role that hasanyActiononanyResource.Grant only to users who must run
mongorestorewith--oplogReplay.Basic
mongorestoreOperationsThe
mongorestoreutility restores a binary backup created bymongodump. By default,mongorestorelooks for a database backup in thedump/directory.The
mongorestoreutility restores data by connecting to a runningmongoddirectly.mongorestorecan restore either an entire database backup or a subset of the backup.Note
All MongoDB collections have UUIDs by default. When MongoDB restores collections, the restored collections retain their original UUIDs. When restoring a collection where no UUID was present, MongoDB generates a UUID for the restored collection.
For more information on collection UUIDs, see Collections.
To use
mongorestoreto connect to an activemongod, use a command with the following prototype form:mongorestore --uri <connection string> <path to the backup>Consider the following example:
mongorestore /opt/backup/mongodump-1Here,
mongorestoreimports the database backup in the/opt/backup/mongodump-1directory to themongodinstance running on the localhost interface on the default port27017.Use an Oplog File to Backup and Restore Data
To capture writes that may occur while
mongodumpis running, usemongodump --oplog.mongodumpcreates anoplog.bsonfile with oplog entries for each write that occurred during the run. You can apply the oplog operations withmongorestore --oplogReplay.For examples, see mongodump Examples and mongorestore Examples.
All of the data from the
oplog.bsonfile is restored.mongorestore --oplogReplaydoesn't allow you to restore data to an arbitrary point in time. Usemongorestore --oplogReplayto ensure the restored data is up to date with any writes that occurred during themongodump --oplogrun.Note
--oplogis intended for use with replica sets. For sharded clusters, including replica sets that are part of a sharded environment, see Back Up a Self-Managed Sharded Cluster with a Database Dump.You may also consider using the
mongorestore --objcheckoption to check the integrity of objects while inserting them into the database, or you may consider themongorestore --dropoption to drop each collection from the database before restoring from backups.Restore Backups to Non-Local
mongodInstancesBy default,
mongorestoreconnects to a MongoDB instance running on the localhost interface and on the default port (27017). If you want to restore to a different host or port, use the--hostand--portoptions.The following example that specifies the
--hostand--portoptions:mongorestore --host=mongodb1.example.net --port=3017If restoring to an instance that enforces access control, include the
--usernameand the--authenticationDatabaseas well. Omit the--passwordoption to havemongorestoreprompt for the password:mongorestore \
--host=mongodb1.example.net \
--port=3017 \
--username=user \
--authenticationDatabase=admin \
/opt/backup/mongodump-1