#!/bin/bash

# set path to mysql dump 
PATH="$PATH:/opt/mysql/bin"

# Figure out where we live and set some useful constants. 
HOME=`dirname $0`
LOG=$HOME/../log/scriptbackups.log

# Argument parsing. 
flag=$1;
while [ "$flag" != "" ]; do
  shift
  arg=$1;
  case $flag in
    "--op")       OP=$1;;
    "--host")     HOST=$1;;
    "--port")     PORT=$1;;
    "--database") DATABASE=$1;;
    "--login")    LOGIN=$1;;
    "--password") PASSWORD=$1;;
    "--dumpName") DUMPNAME=$1;;
    "--dumpPath") DUMPPATH=$1;;
    "--tables")   TABLES=$1;;
    (*) echo "Unrecognized flag: $flag"; exit 1;;
  esac

  shift
  flag=$1;
done

# See if the operation was specified...
if [ -z $OP ]; then
  echo "Usage: $0 --op { backup|restore|delete } [ more options ]"
  exit 1;
fi

# Function to handle command evaluation neatly.  
doEval() {
  echo "[`date`]: [$1]" >> $LOG
  eval $1
}

# Handle operation. 
case "$OP" in
  # Generate backup using mysqldump, then zip it.
  (backup)
  
    doEval "mysqldump --opt --allow-keywords --quote-names --add-drop-table -u$LOGIN -p$PASSWORD -h $HOST --port=$PORT $DATABASE > $DUMPPATH/$DUMPNAME"
    doEval "echo 'set FOREIGN_KEY_CHECKS =1;' >> $DUMPPATH/$DUMPNAME"
    doEval "gzip --best $DUMPPATH/$DUMPNAME"
    doEval "mv $DUMPPATH/$DUMPNAME.gz $DUMPPATH/$DUMPNAME"

    ;;

  # Restore a backup using mysql after unzipping it.
  (restore)
    doEval "gunzip -c -S '' $DUMPPATH/$DUMPNAME | mysql -h $HOST --port=$PORT -D $DATABASE -u$LOGIN --password=$PASSWORD "
    ;;

  # Delete a backup. 
  (delete)
    doEval "rm -f $DUMPPATH/$DUMPNAME"
    ;;

  (*)
    echo "Unrecognized operation: $OP"; exit 1;;
esac
