#!/bin/bash ################################################################################## # Script-Name : mysqldump.sh # # Description : Datenbank-Dump der kompletten (alle Tabellen) unserer # # MySQL-Datenbank nach /root/mysql/dumps # # Drei Datensicherungen werden aufgehoben, ältere werden gelöscht. # # # # # # # # Last update : 13.05.2013 # # Version : 0.01 # ################################################################################## ################################################################################## # H I S T O R Y # ################################################################################## # Version : 0.01 # # Description : initial release # # ------------------------------------------------------------------------------ # # Version : x.xx # # Description : # ################################################################################## # Source function library. . /etc/init.d/functions # Definition der systemindividuellen Variablen # Script-Name. SCRIPT_NAME='mysqldump' # Backup-Verzeichnis. DIR_TARGET='/root/mysql/dump' DUMP_FILES="$DIR_TARGET/*.sql" # Mail-Empfänger MAIL_RECIPIENT='django@it-ignorant.de' # Status-Mail versenden? [J|N]. MAIL_STATUS='N' # Datenbankdefinitionen DB_HOST="127.0.0.1" DB_USER="root" DB_SECRET="immNI+32$cHU551n5Kn13gn1uS4W6HYu0SAJwH8W" # Variablen MYSQLDUMP_COMMAND=`command -v mysqldump` TOUCH_COMMAND=`command -v touch` RM_COMMAND=`command -v rm` PROG_SENDMAIL=`command -v sendmail` CAT_COMMAND=`command -v cat` DATE_COMMAND=`command -v date` MKDIR_COMMAND=`command -v mkdir` FILE_NAME='/'$SCRIPT_NAME'.'`$DATE_COMMAND '+%Y-%m-%d-%H%M%S'`'.sql' FILE_LOCK='/tmp/'$SCRIPT_NAME'.lock' FILE_LOG='/var/log/'$SCRIPT_NAME'.log' FILE_LAST_LOG='/tmp/'$SCRIPT_NAME'.log' FILE_MAIL='/tmp/'$SCRIPT_NAME'.mail' VAR_HOSTNAME=`uname -n` VAR_SENDER='root@'$VAR_HOSTNAME VAR_EMAILDATE=`$DATE_COMMAND '+%a, %d %b %Y %H:%M:%S (%Z)'` # Functionen function log() { echo $1 echo `$DATE_COMMAND '+%Y/%m/%d %H:%M:%S'` " INFO:" $1 >>${FILE_LAST_LOG} } function movelog() { $CAT_COMMAND $FILE_LAST_LOG >> $FILE_LOG $RM_COMMAND -f $FILE_LAST_LOG $RM_COMMAND -f $FILE_LOCK } function sendmail() { case "$1" in 'STATUS') MAIL_SUBJECT='Status execution '$SCRIPT_NAME' script.' ;; *) MAIL_SUBJECT='ERROR while execution '$SCRIPT_NAME' script !!!' ;; esac $CAT_COMMAND <$FILE_MAIL Subject: $MAIL_SUBJECT Date: $VAR_EMAILDATE From: $VAR_SENDER To: $MAIL_RECIPIENT MAIL $CAT_COMMAND $FILE_LAST_LOG >> $FILE_MAIL $PROG_SENDMAIL -f $VAR_SENDER -t $MAIL_RECIPIENT < $FILE_MAIL $RM_COMMAND -f $FILE_MAIL } # Main. log "" log "+-------------------------------------------------------------------------------+" log "| .................... Start des MySQL-Datenbank-Dumps ........................ |" log "+-------------------------------------------------------------------------------+" log "" log "Das Datenbank-Backupscript wurde mit folgenden Parametern aufgerufen:" log "" log "SCRIPT_NAME : $SCRIPT_NAME" log "ZIEL-VERZEICHNIS: $DIR_TARGET" log "MAIL_EMPFÄNGER : $MAIL_RECIPIENT" log "MAIL_STATUS : $MAIL_STATUS" log "" # Prüfung ob alle benötigten Programme und Befehle vorhanden sind. if [ ! -s "$MYSQLDUMP_COMMAND" ]; then log "Prüfen, ob das Programm '$MYSQLDUMP_COMMAND' vorhanden ist.................[FEHLER]" sendmail ERROR movelog exit 10 else log "Prüfen, ob das Programm '$MYSQLDUMP_COMMAND' vorhanden ist.................[ OK ]" fi if [ ! -s "$TOUCH_COMMAND" ]; then log "Prüfen, ob das Programm '$TOUCH_COMMAND' vorhanden ist.........................[FEHLER]" sendmail ERROR movelog exit 11 else log "Prüfen, ob das Programm '$TOUCH_COMMAND' vorhanden ist.........................[ OK ]" fi if [ ! -s "$RM_COMMAND" ]; then log "Prüfen, ob das Programm '$RM_COMMAND' vorhanden ist............................[FEHLER]" sendmail ERROR movelog exit 12 else log "Prüfen, ob das Programm '$RM_COMMAND' vorhanden ist............................[ OK ]" fi if [ ! -s "$CAT_COMMAND" ]; then log "Prüfen, ob das Programm '$CAT_COMMAND' vorhanden ist..........................[FEHLER]" sendmail ERROR movelog exit 13 else log "Prüfen, ob das Programm '$CAT_COMMAND' vorhanden ist...........................[ OK ]" fi if [ ! -s "$DATE_COMMAND" ]; then log "Prüfen, ob das Programm '$DATE_COMMAND' vorhanden ist...........................[FEHLER]" sendmail ERROR movelog exit 14 else log "Prüfen, ob das Programm '$DATE_COMMAND' vorhanden ist..........................[ OK ]" fi if [ ! -s "$MKDIR_COMMAND" ]; then log "Prüfen, ob das Programm '$MKDIR_COMMAND' vorhanden ist..........................[FEHLER]" sendmail ERROR movelog exit 15 else log "Prüfen, ob das Programm '$MKDIR_COMMAND' vorhanden ist.........................[ OK ]" fi if [ ! -s "$PROG_SENDMAIL" ]; then log "Prüfen, ob das Programm '$PROG_SENDMAIL' vorhanden ist.................[FEHLER]" sendmail ERROR movelog exit 16 else log "Prüfen, ob das Programm '$PROG_SENDMAIL' vorhanden ist.................[ OK ]" fi if [ ! -e "$FILE_LOCK" ]; then log "Prüfen, ob das Programm nicht bereits oder noch läuft......................[ OK ]" $TOUCH_COMMAND $FILE_LOCK else log "Prüfen, ob das Programm nicht bereits oder noch läuft......................[FEHLER]" log "" log "FEHLER: Das Script läuft bereits bzw. immer noch, oder die LOCK-Datei" log "existiert noch von einem früheren Programmaufruf!" log "" sendmail ERROR movelog exit 20 fi if [ ! -d "$DIR_TARGET" ]; then log "Prüfen, ob Zielverzeichnis existiert.......................................[FEHLER]" log "" log " INFO: Erstelle Zielverzeichnis!" log " INFO: --> "$DIR_TARGET log "" $MKDIR_COMMAND -p $DIR_TARGET else log "Prüfen, ob Zielverzeichnis existiert.......................................[ OK ]" fi if [ "$UID" -ne 0 ]; then log "Prüfen, ob das Script mit root-Rechten gestartet wurde.......................[FEHLER]" log "" sendmail ERROR movelog exit 21 else log "Prüfen, ob das Script mit root-Rechten gestartet wurde.....................[ OK ]" fi # Start dumping. log "" log "+-------------------------------------------------------------------------------+" log "| .................... Start des Datenbank-Dumps .............................. |" log "+-------------------------------------------------------------------------------+" log "" log "$MYSQLDUMP_COMMAND -h "$DB_HOST" -u "$DB_USER" --all-databases --events > $DIR_TARGET$FILE_NAME" $MYSQLDUMP_COMMAND -h $DB_HOST -u $DB_USER --password=$DB_SECRET --all-databases --events > $DIR_TARGET$FILE_NAME if [ "$?" != 0 ]; then log "" $RM_COMMAND -f $FILE_LOCK sendmail ERROR movelog exit 99 else log "" log "+-------------------------------------------------------------------------------+" log "| ........................ Datenbank-Dump beendet ............................. |" log "+-------------------------------------------------------------------------------+" log "" fi # Bis auf die letzten drei Datenbankbackups alle anderen Dateien löschen. cd $DIR_TARGET/ (ls $DUMP_FILES -t|head -n 3;ls $DUMP_FILES )|sort|uniq -u|xargs rm if [ "$?" != "0" ]; then log "alte Datenbanksicherungen aus Zielverzeichnis $DIR_TARGET gelöscht....[FEHLER]" log "" sendmail ERROR movelog exit 69 else log "alte Datenbanksicherungen aus Zielverzeichnis $DIR_TARGET gelöscht....[ OK ]" log "" fi # Finish syncing. log "+-------------------------------------------------------------------------------+" log "| ..................... Ende des MySQL-Datenbank-Dumps ........................ |" log "+-------------------------------------------------------------------------------+" log "" # Status eMail versenden if [ $MAIL_STATUS = 'J' ]; then sendmail STATUS fi # Temporäres Logfile permanent sichern movelog exit 0