#!/usr/bin/env bash
#@author: tomfmason@gmail.com
#store sql dumps in a git repo.
#this method saves on disk space usage for my hourly backups by ~30%
if [ -z $1 ]; then
echo "usage: $0 database_name"
exit 1
fi
DIR=/var/backup/mysql/$1
TIMESTAMP=`date +%Y-%m-%d-%H%M`
mkdir -p $DIR
REPO=$DIR/current.git
function create_repo {
if [ ! -d $1 ]; then
mkdir $1
cd $1
git init
fi
}
if [ -d $REPO ] && [ $(date +%H) == "00" ]; then
tar cjf $DIR/ $(date +%Y-%m-)$[$(date +%d)-1].tar.bz2 $REPO
rm -rf $REPO
create_repo $REPO
NEW=1
elif [ ! -d $REPO ]; then
create_repo $REPO
NEW=1
fi
cd $REPO
mysqladmin -u root -p'password' stop-slave
mysqldump --opt -c -e -Q -q --single-transaction -u root -p'password' $1 > $REPO/dump.sql
mysqladmin -u root -p'password' start-slave
if [ "$NEW" ]; then
git add .
git commit -m "$TIMESTAMP"
else
git commit -a -m "$TIMESTAMP"
fi
find $DIR/*.tar.bz2 -mtime +4 -exec rm -rf {} \;