Skip to content

Instantly share code, notes, and snippets.

@drola
Created March 24, 2013 22:16
Show Gist options
  • Save drola/5233807 to your computer and use it in GitHub Desktop.
Save drola/5233807 to your computer and use it in GitHub Desktop.
Simple script to backup your files and MySql database to Amazon S3
#!/bin/bash
############# More information #############
# http://drola.si/backing-up-to-amazon-s3/ #
############################################
EC2_ACCESS_KEY=YOUR_ACCESS_KEY
EC2_SECRET_KEY=YOUR_SECRET_ACCESS_KEY
BUCKET_NAME="NAME_OF_THE_BUCKET"
MYSQL_PASSWORD="MYSQL_ROOT_PASSWORD"
NOW=$(date +"%Y-%m-%d_%H-%M")
TMPDIR="/var/backups/$NOW/" #temporary directory for storing archives
add_md5_hash() {
if [ -z "$1" ]
then
echo "You must pass filename."
return -1
fi
echo "Calculating hash..."
md5sum $1 >> "$1.md5"
echo "Uploading hash..."
s3put "$BUCKET_NAME/$1.md5" "$1.md5"
}
backup_dir() {
if [ -z "$1" ]
then
echo "You must pass directory name."
return -1
fi
DIR="$1"
FILENAME="$NOW${1//\//_}.tar.gz"
echo "Backing up $1"
mkdir -p "$TMPDIR"
cd "$TMPDIR"
echo "Creating temporary archive $FILENAME"
tar -zcf "$FILENAME" "$1"
echo "Uploading to AWS ( $BUCKET_NAME )"
s3put "$BUCKET_NAME/$FILENAME" "$FILENAME"
add_md5_hash $FILENAME
}
backup_mysql_database() {
mkdir -p "$TMPDIR"
cd "$TMPDIR"
FILENAME="${NOW}_db_$1.sql"
echo "Creating temporary file $FILENAME"
mysqldump -u root -p$MYSQL_PASSWORD --database $1 >> $FILENAME
echo "Uploading to AWS ( $BUCKET_NAME )"
s3put "$BUCKET_NAME/$FILENAME" "$FILENAME"
add_md5_hash $FILENAME
}
backup_mysql_server() {
mkdir -p "$TMPDIR"
cd "$TMPDIR"
FILENAME="${NOW}_localhost.sql"
echo "Creating temporary file $FILENAME"
mysqldump -u root -p$MYSQL_PASSWORD --all-databases >> $FILENAME
echo "Uploading to AWS ( $BUCKET_NAME )"
s3put "$BUCKET_NAME/$FILENAME" "$FILENAME"
add_md5_hash $FILENAME
}
#Examples:
backup_dir "/PATH/TO/THE/DIRECTORY/YOU/WANT/TO/BACKUP"
backup_mysql_server #if you want to backup all databases
backup_mysql_database "DB_NAME" #if you want to backup single database
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment