#!/bin/bash
#
# dumps a single DB, given as $1, efficiently to file.
# filename can be given as $2, defaults to $1.sql.gz
# .gz and .bz2 are respected by filtering the output through gzip/bzip2

DBNAME="$1"
shift
if [ -z "$DBNAME" ] ; then
  echo "$(date +%Y-%m-%d\ %H:%M:%S): FATAL: No Databasename specified as \$1."
  echo "Syntax: $0 databaseName [ fileName [mysqldump options] ]"
  exit 1
fi

DUMPFILE="$1"
shift
if [ -z "$DUMPFILE" ] ; then
  echo "$(date +%Y-%m-%d\ %H:%M:%S): WARNING: No file name given as \$2, defaulting to ${DBNAME}.sql.gz"
  DUMPFILE="${DBNAME}.sql.gz"
fi

MYSQLOPTS=""
MYSQLOPTS="$MYSQLOPTS --extended-insert"
MYSQLOPTS="$MYSQLOPTS --add-drop-table"
MYSQLOPTS="$MYSQLOPTS --add-locks"
#MYSQLOPTS="$MYSQLOPTS --flush-logs"
MYSQLOPTS="$MYSQLOPTS --force"
MYSQLOPTS="$MYSQLOPTS --single-transaction"
MYSQLOPTS="$MYSQLOPTS --quote-names"

MYSQLOPTS="$MYSQLOPTS --events"
MYSQLOPTS="$MYSQLOPTS --routines"
# enabled by default:
#MYSQLOPTS="$MYSQLOPTS --triggers"

MYSQLOPTS="$MYSQLOPTS $*"


echo "$(date +%Y-%m-%d\ %H:%M:%S): INFO: Saving DB $DBNAME to $DUMPFILE"

FILTER=""
echo "$DUMPFILE" |egrep '\.gz' >/dev/null && FILTER="gzip"
echo "$DUMPFILE" |egrep '\.bz2' >/dev/null && FILTER="bzip2"

#echo "Executing ..."
if [ -z "$FILTER" ] ; then
  #echo "mysqldump $MYSQLOPTS $DBNAME >$DUMPFILE"
  mysqldump $MYSQLOPTS $DBNAME >$DUMPFILE || exit 11
else 
  #echo "mysqldump $MYSQLOPTS $DBNAME |$FILTER >$DUMPFILE"
  mysqldump $MYSQLOPTS $DBNAME |$FILTER >$DUMPFILE || exit 12
fi

chmod go-rwx $DUMPFILE
ls -ld $DUMPFILE

echo "$(date +%Y-%m-%d\ %H:%M:%S): GOOD: Saved DB $DBNAME to $DUMPFILE"

