Skip to content

Instantly share code, notes, and snippets.

@wiredmax
Forked from eladnava/mongodb-s3-backup.sh
Last active January 1, 2018 19:13
Show Gist options
  • Save wiredmax/8a33e61eb9c64d8532e792d94e22702d to your computer and use it in GitHub Desktop.
Save wiredmax/8a33e61eb9c64d8532e792d94e22702d to your computer and use it in GitHub Desktop.
Automatically backup a MongoDB database to S3 using mongodump, tar, awscli and twilio API SMS notification (Ubuntu 16.04 LTS)
#!/bin/sh
# Make sure to:
# 1) Name this file `backup.sh` and place it in /home/ubuntu
# 2) Run sudo apt-get install awscli to install the AWSCLI
# 3) Run aws configure (enter s3-authorized IAM user and specify region)
# 4) Fill in DB host + name
# 5) Fill Twilio twilio configuration
# 6) Create S3 bucket for the backups and fill it in below (set a lifecycle rule to expire files older than X days in the bucket)
# 7) Run chmod +x backup.sh
# 8) Test it out via ./backup.sh
# 9) Set up a daily backup at midnight via `crontab -e`:
# 0 0 * * * /home/ubuntu/backup.sh > /home/ubuntu/backup.log
# DB host (secondary preferred as to avoid impacting primary performance)
HOST=localhost
# DB name
DBNAME=test
# S3 bucket name
BUCKET=bucket-name
# Linux user account
USER=ubuntu
# Current time
TIME=`/bin/date +%d-%m-%Y-%T`
# Backup directory
DEST=/home/$USER/tmp
# Tar file of backup directory
TAR=$DEST/../$TIME.tar
# S3 PREFIX
FOLDER=s3prefix
# TWILIO CONFIG
phone_number="+15145551234"
available_number="+15145554567"
account_sid="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
auth_token="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
# Create backup dir (-p to avoid warning if already exists)
/bin/mkdir -p $DEST
# Log
echo "Backing up $HOST/$DBNAME to s3://$BUCKET/$FOLDER/ on $TIME";
# Dump from mongodb host into backup directory
/usr/bin/mongodump -h $HOST -d $DBNAME -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/$FOLDER/
# Remove tar file locally
/bin/rm -f $TAR
# Remove backup directory
/bin/rm -rf $DEST
exists=$(/usr/bin/aws s3 ls $BUCKET/$FOLDER/$TIME)
if [ -z "$exists" ]; then
echo "Backup failed!"
curl -X POST -F "Body=Backup $TIME failed." \
-F "From=${available_number}" -F "To={$phone_number}" \
"https://api.twilio.com/2010-04-01/Accounts/${account_sid}/Messages" \
-u "${account_sid}:${auth_token}"
else
echo "Backup available at https://s3.amazonaws.com/$BUCKET/$FOLDER/$TIME.tar"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment