#!/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 [mariadb-dump options] ]"
  exit 1
fi

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

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

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

MARIADBOPTS="$MARIADBOPTS $*"


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 "mariadb-dump $MARIADBOPTS $DBNAME >$DUMPFILE"
  mariadb-dump $MARIADBOPTS $DBNAME >$DUMPFILE || exit 11
else 
  #echo "mariadb-dump $MARIADBOPTS $DBNAME |$FILTER >$DUMPFILE"
  mariadb-dump $MARIADBOPTS $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"

