#!/bin/sh
export PATH="$PATH:/usr/local/bin"

defaults_file=/etc/mysql/my.cnf
user=root
password=''
remotedir=/mnt/ppcbackup-mysql
destdir="$remotedir/ppcdirdev"
logfile=/var/log/ppcdirdev-xtrabackup.log
status=/var/spool/ppcdirdev/xtrabackup-status

die() {
  echo "$@" >&2
  exit 1
}
log() {
  echo "`date` $@" >>$logfile
}

lockfile=/tmp/`basename $0`.flock
if [ x"$1" != x"locked" ]; then
  running=$(ps -e -o pid,cmd | grep "[f]lock -n $lockfile")
  [ -z "$running" ] || echo "already running: $running"
  flock -n $lockfile -c "$0 locked $@" &
  exit 42
fi
shift

mkdir -p $remotedir
if ! grep $remotedir /proc/mounts; then
  /sbin/mount.rfs ppcbackup03h.yandex.ru:/local/backup/rsnap/mysql/ $remotedir -o _netdev,rw || die "Can't mount glusterfs share"
fi
mkdir -p $destdir

tmplog=`mktemp`

[ -f $logfile ] || touch $logfile
chmod 600 $logfile

pwd_opt="--password=$password"
[ -z $password ] && pwd_opt=''

# mysql backup first-pass
log "run first-pass: innobackupex-1.5.1 --defaults-file=$defaults_file --user=$user $pwd_opt $destdir"
innobackupex-1.5.1 --defaults-file=$defaults_file --user=$user $pwd_opt $destdir >$tmplog 2>&1 || die "innobackupex first-pass failed"
cat $tmplog >> $logfile
# get real innobackup dest dir $destdir/$timestamp
timestamp=`grep target-dir $tmplog | perl -ne '/target-dir=(\S+)/ && print $1'`
timestamp=${timestamp##*/}
[ -d $destdir/$timestamp ] || die "$destdir/$timestamp differ from innobackupex dst dir"
#mysql second-pass
log "run second-pass: innobackupex-1.5.1 --defaults-file=$defaults_file --user=$user $pwd_opt --apply-log $destdir/$timestamp"
innobackupex-1.5.1 --defaults-file=$defaults_file --user=$user $pwd_opt --apply-log $destdir/$timestamp >$tmplog 2>&1 || die "innobackupex second-pass failed" 
cat $tmplog >> $logfile

# move mysql backup to gluster share
log "run mv $destdir/$timestamp $destdir/tmp"
mv $destdir/$timestamp $destdir/tmp >>$logfile 2>&1 || die "move failed"
touch $destdir/tmp/.rsnap_prot0

rm $tmplog
umount $remotedir

echo `date +%s` > $status
echo "`date` done" >> $logfile
