#!/bin/bash

########################################################
#
# Dominik Heeg - www.d0m.me
# MySQL Backup Script
#
########################################################

# 0 = Nur eine Ausgabedatei siehe "MYSQLDUMP_DATABASE"
# 1 = Eine Datei pro Datenbank
EINZEL_DUMPS="0"
BACKUP_DIR="/backup"
MYSQLDUMP="/usr/bin/mysqldump"
MYSQLSHOW="/usr/bin/mysqlshow"
MYSQL_SOCKET="/var/run/mysqld/mysqld.sock"
MYSQL_USER="root"
# Plesk:   
# MYSQL_PW=$(cat /etc/psa/.psa.shadow)
# Confixx: 
# MYSQL_PW=$(cat /root/confixx/confixx_main.conf | grep mysqlUserPw | cut -d"'" -f2)
# Handeingabe:
MYSQL_PW="test"
MYSQLDUMP_PARAMETER="--opt --add-drop-table --triggers --routines --delete-master-logs --master-data --flush-logs --force"

# Nur gueltig bei EINZEL_DUMPS=0 !
# Für alle Datenbanken in ein File:
MYSQLDUMP_DATABASE="--all-databases"
# Für eine einzelne Datenbank:
# MYSQLDUMP_DATABASE="datenbank-name"

# Datums Format und Loeschdatum
DATE_FORMAT=$(date "+%d.%m.%y")
DELETE_DATE=$(date --date='8 days ago' "+%d.%m.%y")


##########################################################
if [ ! -d "$BACKUP_DIR" ]
then
mkdir "$BACKUP_DIR" || exit 1
fi

if [ "$EINZEL_DUMPS" == 1 ]
then
 DBLIST=`mktemp`
 "$MYSQLSHOW" --socket="$MYSQL_SOCKET" --user="$MYSQL_USER" --password="$MYSQL_PW" | awk '{print $2}' | grep -v Databases | grep -v "^$" | sort >$DBLIST || exit 1
 if [ ! -d "$BACKUP_DIR"/"$DATE_FORMAT" ]
 then 
 mkdir "$BACKUP_DIR"/"$DATE_FORMAT" || exit 1
 fi
 cd "$BACKUP_DIR"/"$DATE_FORMAT"
 echo "Einzel Dumps vom "$DATE_FORMAT" werden erstellt"
 for DB in `cat $DBLIST`; do
 "$MYSQLDUMP" $MYSQLDUMP_PARAMETER --socket="$MYSQL_SOCKET" --user="$MYSQL_USER" --password="$MYSQL_PW" "$DB" > "$BACKUP_DIR"/"$DATE_FORMAT"/"$DB".sql
  if [ -f "$BACKUP_DIR"/"$DATE_FORMAT"/"$DB".sql ]
  then
  tar cfz "$DB".sql.tgz "$DB".sql || exit 1
  rm "$DB".sql || exit 1
  fi
 done
else
echo "MySQL Dump vom $DATE_FORMAT wird erstellt"
"$MYSQLDUMP" $MYSQLDUMP_PARAMETER --socket="$MYSQL_SOCKET" --user="$MYSQL_USER" --password="$MYSQL_PW" "$MYSQLDUMP_DATABASE" > "$BACKUP_DIR"/"$DATE_FORMAT"-backup.sql
 if [ -f "$BACKUP_DIR"/"$DATE_FORMAT"-backup.sql ]
 then
 cd "$BACKUP_DIR"
 tar cfz "$DATE_FORMAT"-backup.sql.tgz "$DATE_FORMAT"-backup.sql || exit 1
 rm "$DATE_FORMAT"-backup.sql || exit 1
 fi
fi

if [ -d "$BACKUP_DIR"/"$DELETE_DATE" ]
then
rm -rf "$BACKUP_DIR"/"$DELETE_DATE" || exit 1
echo "MySQL Dumps vom "$DELETE_DATE" wurden geloescht"
fi

if [ -f "$BACKUP_DIR"/"$DELETE_DATE"-backup.sql.tgz ]
then
rm "$BACKUP_DIR"/"$DELETE_DATE"-backup.sql.tgz || exit 1
echo "MySQL Dump vom "$DELETE_DATE" wurde geloescht"
fi

echo "MySQL Backup wurde erfolgreich beendet"
echo "-----------------------------------------------------------"

exit 0

