Tuesday, May 20, 2014

Automating backup for MongoDB using CRON and S3CMD

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
#!/bin/bash
 
#Force file syncronization and lock writes
mongo admin --eval "printjson(db.fsyncLock())"
 
MONGODUMP_PATH="/usr/bin/mongodump"
MONGO_HOST="SERVER_IP_HERE" #replace with your server ip
MONGO_PORT="27017"
MONGO_DATABASE="dbname_here" #replace with your database name
 
TIMESTAMP=`date +%F-%H%M`
S3_BUCKET_NAME="bucketname_here" #replace with your bucket name on Amazon S3
S3_BUCKET_PATH="mongodb-backups"
 
# Create backup
$MONGODUMP_PATH -h $MONGO_HOST:$MONGO_PORT -d $MONGO_DATABASE
 
# Add timestamp to backup
mv dump mongodb-$HOSTNAME-$TIMESTAMP
tar cf mongodb-$HOSTNAME-$TIMESTAMP.tar mongodb-$HOSTNAME-$TIMESTAMP
 
# Upload to S3
s3cmd put mongodb-$HOSTNAME-$TIMESTAMP.tar 
   s3://$S3_BUCKET_NAME/$S3_BUCKET_PATH/mongodb-$HOSTNAME-$TIMESTAMP.tar
 
#Unlock database writes
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
#every day at 01h 00m
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

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

0 comments: