Automating backup for MongoDB using CRON and S3CMD





5.00/5 (4 votes)
This paper attempts to pass all the steps to create an automated backup for a MongoDB Server on a Linux Server where all backups are sent to Amazon AWS S3 service scheduled through crontab.
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
#!/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