created by tomfmason at 2008-12-08 13:28:41

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/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 {} \;