Taking full backups every time may be viable for some deployments but as size reaches a certain threshold, full backups take too much time and space.
At this point, we want to take full backups every once in a while (maybe one per month for example) and incremental backups in between (for example nightly).
Both Ops Manager and Cloud Manager support incremental backups and if we get to this size it may be a good idea to use a tool to take our backups instead of rolling our own.
If, for one reason or another, we don't want or can't use these tools, we have the option of restoring via the oplog, as follows:
- Take a full backup with any method previously described
- Lock writes on the secondary server of our replica set
- Note the latest entry in oplog
- Export entries in oplog after the latest entry in oplog:
> mongodump --host <secondary> -d local -c oplog.rs -o /mnt/mongo-oldway_backup
--query '{ "ts" : { $gt : Timestamp(1467999203, 391) } }'
- Unlock writes on the secondary server
To restore we can use the oplog.rs file we just exported and use mongorestore with the option --oplogReplay:
> mongorestore -h <primary> --port <port> --oplogReplay <data_file_position>
An even better solution is to use the LVM filesystem with incremental backups but this depends on the underlying LVM implementation that we may or may not be able to tweak.