MongoDB Backup & Restore
Protecting your data with reliable backups
💾 What is Backup & Restore?
Backup creates copies of your database for disaster recovery. Restore recovers data from backups when needed. Regular backups protect against data loss from failures or errors.
# Create a backup
mongodump --db myDatabase --out /backup/
# Restore from backup
mongorestore --db myDatabase /backup/myDatabase/
Output:
2024-01-01T10:00:00.000+0000 done dumping myDatabase 2024-01-01T10:00:05.000+0000 finished restoring
Key Backup Methods
mongodump
Binary backup utility
mongodump --uri="mongodb://localhost"
mongoexport
Export to JSON/CSV
mongoexport --db mydb --collection users
Snapshots
Filesystem-level backups
db.fsyncLock()
// Take snapshot
db.fsyncUnlock()
Cloud Backups
Automated Atlas backups
# Configured in Atlas UI
# Automatic continuous backups
🔹 Using mongodump
mongodump creates binary backups of your MongoDB databases. It's the most common backup method for complete database copies.
# Backup entire MongoDB instance
mongodump --out /backup/full/
# Backup specific database
mongodump --db myDatabase --out /backup/mydb/
# Backup specific collection
mongodump --db myDatabase --collection users --out /backup/
# Backup with compression
mongodump --db myDatabase --gzip --out /backup/compressed/
# Backup remote database
mongodump --uri="mongodb://user:pass@host:27017/mydb" --out /backup/
Output:
2024-01-01T10:00:00.000+0000 writing myDatabase.users to /backup/myDatabase/users.bson 2024-01-01T10:00:02.000+0000 done dumping myDatabase.users (10000 documents)
🔹 Using mongorestore
mongorestore recovers data from mongodump backups. You can restore entire databases or specific collections as needed.
# Restore entire backup
mongorestore /backup/full/
# Restore specific database
mongorestore --db myDatabase /backup/myDatabase/
# Restore to different database name
mongorestore --db newDatabase /backup/myDatabase/
# Restore compressed backup
mongorestore --gzip /backup/compressed/
# Restore and drop existing collections
mongorestore --drop --db myDatabase /backup/myDatabase/
Output:
2024-01-01T10:05:00.000+0000 restoring myDatabase.users from /backup/myDatabase/users.bson 2024-01-01T10:05:03.000+0000 finished restoring myDatabase.users (10000 documents)
🔹 Export and Import Data
mongoexport and mongoimport work with JSON or CSV formats, useful for data migration and human-readable backups.
# Export collection to JSON
mongoexport --db myDatabase --collection users --out users.json
# Export to CSV with specific fields
mongoexport --db myDatabase --collection users \
--type=csv --fields=name,email,age --out users.csv
# Import JSON data
mongoimport --db myDatabase --collection users --file users.json
# Import CSV with header row
mongoimport --db myDatabase --collection users \
--type=csv --headerline --file users.csv
Output:
2024-01-01T10:10:00.000+0000 exported 10000 records 2024-01-01T10:10:05.000+0000 imported 10000 documents
🔹 Automated Backup Script
Create automated backup scripts to run regularly using cron jobs or task schedulers for consistent data protection.
#!/bin/bash
# backup-mongodb.sh
# Configuration
BACKUP_DIR="/backups/mongodb"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="myDatabase"
# Create backup directory
mkdir -p $BACKUP_DIR/$DATE
# Perform backup
mongodump --db $DB_NAME --out $BACKUP_DIR/$DATE --gzip
# Remove backups older than 7 days
find $BACKUP_DIR -type d -mtime +7 -exec rm -rf {} \;
echo "Backup completed: $BACKUP_DIR/$DATE"
🔹 Point-in-Time Recovery
Restore your database to a specific moment using oplog replay, useful for recovering from accidental data changes.
# Backup with oplog for point-in-time recovery
mongodump --oplog --out /backup/pit/
# Restore to specific point in time
mongorestore --oplogReplay --oplogLimit 1640000000:1 /backup/pit/
# Restore with oplog
mongorestore --oplogReplay /backup/pit/
Output:
2024-01-01T10:15:00.000+0000 replaying oplog 2024-01-01T10:15:05.000+0000 applied 5000 oplog entries