#!/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) 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) # 6) Run chmod +x backup.sh # 7) Test it out via ./backup.sh # 8) 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=db2.example.com # DB name DBNAME=dbName # S3 bucket name BUCKET=mongodb/backup # Current time TIME=`/bin/date +%m-%d-%Y-%T` # Username USERNAME=johndoe # Password PASSWORD=strongPassword # Log echo "Backing up $HOST/$DBNAME to s3://$BUCKET/ on $TIME"; S3PATH="s3://$BUCKET/" S3BACKUP=$S3PATH$TIME.gz S3LATEST=$S3PATH"latest".gz # Make S3 bucket /usr/bin/aws s3 mb $S3PATH # Dump from MongoDB data to S3 /usr/bin/mongodump -h $HOST -d $DBNAME -p $PASSWORD -u $USERNAME --authenticationDatabase "admin" --gzip --archive | aws s3 cp - $S3BACKUP # Copy the new backup to latest /usr/bin/aws s3 cp $S3BACKUP $S3LATEST # All done echo "Backup available at https://s3.amazonaws.com/$BUCKET/$TIME.gz" # To restore stabase # aws s3 cp s3://mongodb/backup/latest.gz - | mongorestore -h db1.example.com -d dbName --archive --gzip -u johndoe -p strongPassword --authenticationDatabase admin