Table of Contents
Introduction
The tip below describes how to create an automatic backup routine for a MongoDB server in a Linux environment using the
Cron scheduler and Amazon S3 to store all backup data.
Background
To complete the steps, you must have:
- MongoDB 2.2.3 or higher configured in a Linux environment (preferably in an instance on Amazon EC2)
- Amazon S3 account to store all backup data
Install and Configure S3CMD
S3cmd
is a program that allows you to perform all operations in an Amazon S3
using the shell
.
To install and configure:
sudo su
sudo yum --enablerepo epel install s3cmd
s3cmd --configure
To test s3cmd
, display all buckets in your Amazon S3
account.
s3cmd ls
Backup Script
Create a new file shell
, named as mongodb_to_s3_backup.sh
using any Linux editor (I use vi
)
vi mongodb_to_s3_backup.sh
mongo admin --eval "printjson(db.fsyncLock())"
MONGODUMP_PATH="/usr/bin/mongodump"
MONGO_HOST="SERVER_IP_HERE"
MONGO_PORT="27017"
MONGO_DATABASE="dbname_here"
TIMESTAMP=`date +%F-%H%M`
S3_BUCKET_NAME="bucketname_here"
S3_BUCKET_PATH="mongodb-backups"
$MONGODUMP_PATH -h $MONGO_HOST:$MONGO_PORT -d $MONGO_DATABASE
mv dump mongodb-$HOSTNAME-$TIMESTAMP
tar cf mongodb-$HOSTNAME-$TIMESTAMP.tar mongodb-$HOSTNAME-$TIMESTAMP
s3cmd put mongodb-$HOSTNAME-$TIMESTAMP.tar
s3://$S3_BUCKET_NAME/$S3_BUCKET_PATH/mongodb-$HOSTNAME-$TIMESTAMP.tar
mongo admin --eval "printjson(db.fsyncUnlock())"
Test the script and verify your Amazon S3 bucket.
bash mongodb_to_s3_backup.sh
Backup Automatization with CRON
To schedule the mongodb_to_s3_backup.sh
use the cron
scheduler.
sudo su
crontab -e
Each line (without comments) represents a schedule
00 01 * * * /bin/bash /home/ec2-user/mongodb_to_s3_backup.sh
Just this. Any questions or problems, please, ask me and I'll help you.
Be happy ;]
All codes are in my gist account at: https://gist.github.com/lazarofl/4961746
Lazaro is a brazilian software architect, live in São Paulo, focusing on web development, NoSql and agile practices for startups.
In his personal life he is a part time runner, speaker, amateur astronomer, gamer and an absorbing knowledge ambulant.