#!/bin/bash

#######################################

if ! [ -f /etc/backup-daily.conf ]; then
	echo "/etc/backup-daily.conf not found"
	exit 4
fi

BACKUP_ROOT=

. /etc/backup-daily.conf

[ -z $BACKUP_ROOT ] && exit 11
[ -d $BACKUP_ROOT ] || exit 21

BACKUP_DIR=$BACKUP_ROOT/mysql
[ -d $BACKUP_DIR ] || mkdir $BACKUP_DIR

MYCONF=/etc/mysql/debian.cnf
ZIPOTF=0

if [ -f /etc/backup-daily-mysql.conf ]; then
	. /etc/backup-daily-mysql.conf
fi

[ -z $MYCONF ] && exit 11
if ! [ -f "${MYCONF}" ]; then
	echo "${MYCONF} not found"
	exit 4
fi

#######################################

[ -d $BACKUP_DIR/tmp ] && rm -r $BACKUP_DIR/tmp
mkdir $BACKUP_DIR/tmp

SQL="SELECT schema_name FROM information_schema.schemata WHERE"
SQL="${SQL} schema_name NOT IN ('information_schema','performance_schema');"

DBS="$(echo $SQL | mysql --defaults-file=$MYCONF -Bs )"

# turn off slow query log
mysql --defaults-file=$MYCONF -Bse 'SET GLOBAL slow_query_log = OFF;'

# save databases into separate files
for db in $DBS
do
	OPTS=""
	DBC="OPT_${db//-/_}"
	[ -n "${!DBC}" ] && OPTS="${!DBC}"

	FILE=$BACKUP_DIR/tmp/$db.sql
	[ -f $FILE.gz ] && rm $FILE.gz
	[ -f $FILE ] && rm $FILE

	if [ "$ZIPOTF" == "1" ]; then
		mysqldump --defaults-file=${MYCONF} ${OPTS} ${db} -Q -R --triggers --add-drop-table --add-locks --force --quick --disable-keys --lock-tables 2>/dev/null | pigz --rsyncable > ${FILE}.gz
	else
		mysqldump --defaults-file=${MYCONF} ${OPTS} ${db} -Q -R --triggers --add-drop-table --add-locks --force --quick --disable-keys --lock-tables -r $FILE 2>/dev/null
		gzip --rsyncable $FILE
	fi
	chown 0:0 ${FILE}.gz
	chmod 0600 ${FILE}.gz
done

# turn slow query log back on
mysql --defaults-file=$MYCONF -Bse 'SET GLOBAL slow_query_log = ON;'

[ -d $BACKUP_DIR/current ] && rm -r $BACKUP_DIR/current
mv $BACKUP_DIR/tmp $BACKUP_DIR/current

exit 0
