MongoDB backup plan
Try this backup script if you want to create a backup from slave mongodb database to S3.
DB host (secondary preferred as to avoid impacting primary performance)
HOST='SomeHost/mongodbtest-slave'
DB name DBNAME=
***
S3 bucket name BUCKET=*-backup
Linux user account USER=
ubuntu
Current time TIME=
/bin/date +%d-%m-%Y-%T
Password PASSWORD=
somePassword#!2*1
Username USERNAME=
someUsername
Backup directory DEST=/home/ubuntu/tmp
Tar file of backup directory TAR=$DEST/../$TIME.tar
Create backup dir (-p to avoid warning if already exists) /bin/mkdir -p $DEST
Log echo "Backing up $HOST/$DBNAME to s3://$BUCKET/ on $TIME";
Dump from mongodb host into backup directory
mongodump --port 27017 -d DBNAME -u USERNAME -p PASSWORD -o $DEST
Create tar of backup directory /bin/tar cvf $TAR -C $DEST .
Upload tar to s3 /usr/bin/aws s3 cp $TAR s3://$BUCKET/
Remove tar file locally /bin/rm -f $TAR
Remove backup directory /bin/rm -rf $DEST
All done echo "Backup available at https://s3.amazonaws.com/$BUCKET/$TIME.tar
You can use the steps above put them in a shell executable file and execute this at any interval using crontab commands.
The
fsync
command flushes the data to disk. It is executed each 60 seconds by default, but can be configured using the--syncdelay
command line parameter.The documentation on backups has some good pointers for daily and weekly backups. For the daily backup, a master-slave configuration seems like the best option, as it will only sync changes.
For the weekly backup you can also use a master-slave configuration, or replication. Another option is the mongodump utility, which will back-up the entire database. It is capable of creating backups while the database is running, so you can run it on the main database or one of the slaves. You can also lock the slave before backing it up.