#!/bin/bash

# www.jarzebski.pl

# Usage: massdump.sh [ -u username -o outputdir -e encoding -z|b ]
# -u username to connect mysql server
# -o output dir
# -e charakter set
# -g enable gzip compression
# -b enable bzip2 compression

MYSQLDUMP=`which mysqldump`
MYSQL=`which mysql`

USER=""
PASSWORD=""

OUTPUTDIR=${PWD}
GZIP_ENABLED=0
BZIP2_ENABLED=0
ENCODING="latin1"
STAMP=$(date +%Y_%m_%d_%H)

while getopts u:e:o:gb OPTION
do
    case ${OPTION} in
        u) USER=${OPTARG};;
        e) ENCODING=${OPTARG};;
        o) OUTPUTDIR=${OPTARG}; mkdir -p $OUTPUTDIR;;
        g) GZIP_ENABLED=1; USEZIPX="gzip"; ZIPE="gz";;
        b) BZIP2_ENABLED=1; USEZIPX="bzip2" ZIPE="bz2";;
        *) exit 2;;
    esac
done

if [ "$USER" != '' ]; then
    echo "Enter password for" $USER":"
    oldmodes=`stty -g`
    stty -echo
    read PASSWORD
    stty $oldmodes
fi

DBS=`$MYSQL --user=$USER --password=$PASSWORD -e "SHOW DATABASES;" | grep -Ev "(information_schema|Database)"`

for db in $DBS; do
    echo "Backup database: $db / $ENCODING encoding"
    if [ $GZIP_ENABLED == 1 ] || [ $BZIP2_ENABLED == 1 ]; then
	$MYSQLDUMP --force --opt \
	--user=$USER --password=$PASSWORD --databases $db \
	--default-character-set=$ENCODING -N | $USEZIPX > "$OUTPUTDIR/$STAMP-$db.$ZIPE"
    else
	$MYSQLDUMP --force --opt \
	--user=$USER --password=$PASSWORD --databases $db \
	--default-character-set=$ENCODING -N > "$OUTPUTDIR/$STAMP-$db.sql"
    fi
done
