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

DOCKERCT="$1"
if [ -z "$DOCKERCT" ] ; then
  echo "$(date +%Y-%m-%d\ %H:%M:%S): FATAL: No docker container given as \$1"
  exit 1
fi

DOCKERPS=$(docker ps --filter "status=running" --filter "name=${DOCKERCT}$" --quiet 2>/dev/null)
if [ -z "$DOCKERPS" ] ; then
  echo "$(date +%Y-%m-%d\ %H:%M:%S): FATAL: Cannot ps docker container ${DOCKERCT}, not running?"
  exit 2
fi

shift

DBNAME="$1"
shift
if [ -z "$DBNAME" ] ; then
  echo "$(date +%Y-%m-%d\ %H:%M:%S): FATAL: No Databasename specified as \$2."
  echo "Syntax: $0 databaseName [ fileName [mariadb-dump options] ]"
  exit 5
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

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"
  docker exec ${DOCKERCT} sh -c 'mariadb-dump -uroot -p"$MARIADB_ROOT_PASSWORD"'" $MARIADBOPTS $DBNAME" >$DUMPFILE || exit 11
else 
  #echo "mariadb-dump $MARIADBOPTS $DBNAME |$FILTER >$DUMPFILE"
  docker exec ${DOCKERCT} sh -c 'mariadb-dump -uroot -p"$MARIADB_ROOT_PASSWORD"'" $MARIADBOPTS $DBNAME" |$FILTER >$DUMPFILE || exit 12
fi

chmod go-rwx $DUMPFILE
ls -ld $DUMPFILE

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

