#!/bin/sh # # Author : Elmar Baumann # Date : 2008/12/03 # Requires: mysqldump, gzip, mail # Doc : Dump einer MySQL-Datenbank, siehe usage() # ############################################################################### SCRIPT=$(basename $0) function usage() { cat << END_USAGE $SCRIPT - Datenbank mit mysqldump sichern Aufruf: $SCRIPT <-u dbuser -p dbpass -h dbhost -n dbname> -u Datenbank-Benutzer -p Datenbank-Passwort -h Datenbank-Host -n Datenbank-Name END_USAGE } while getopts u:p:h:n:o: options do case $options in h) DB_HOST="$OPTARG";; n) DB_NAME="$OPTARG";; p) DB_PASSWORD="$OPTARG";; u) DB_USER="$OPTARG";; *) usage; exit; esac done ERROR_MAIL_TO="..." ERROR_MAIL_SUBJECT="Fehler beim sqldump der Datenbank ${DB_NAME}" ERROR_MAIL_MESSAGE='Fehlernachricht wurde nicht definiert' LOGFILE="..." BACKUP_FILENAME=".../${DB_NAME}-$(date '+%a').sql" EXIT_SUCCESS=0 EXIT_ERROR_USAGE=1 EXIT_ERROR_DUMP=2 EXIT_VALUE=$EXIT_SUCCESS function error_mail() { echo "${ERROR_MAIL_MESSAGE}" | /bin/mail \ -s "${ERROR_MAIL_SUBJECT}" \ "${ERROR_MAIL_TO}" } function print_error() { echo "${ERROR_MAIL_MESSAGE}" error_mail } function check_params() { if [ -z $DB_HOST ] || \ [ -z $DB_NAME ] || \ [ -z $DB_PASSWORD ] || \ [ -z $DB_USER ] then ERROR_MAIL_MESSAGE=$(usage) print_error exit $EXIT_ERROR_USAGE fi } function get_asteriked_password() { echo $DB_PASSWORD | sed 's/./*/g' } function get_dump_error_message() { cat << END_MESSAGE Fehler beim SQL-Dump der Datenbank '${DB_NAME}'! Datenbank-Host : '${DB_HOST}' Datenbank-User : '${DB_USER}' Datenbank-Passwort: '$(get_asteriked_password)' Ausgabe mysqldump: ------------------ $(cat $LOGFILE) END_MESSAGE } function dump_database() { mysqldump \ --user="$DB_USER" \ --password="$DB_PASSWORD" \ --host="$DB_HOST" \ "$DB_NAME" \ -c \ -r "$BACKUP_FILENAME" \ >& $LOGFILE if [ $? -eq 0 ] then rm -f "${BACKUP_FILENAME}.gz" gzip "${BACKUP_FILENAME}" echo "Datenbank '${DB_NAME}' erfolgreich geschrieben nach '$(ls "${BACKUP_FILENAME}"*)'" else ERROR_MAIL_MESSAGE=$(get_dump_error_message) print_error EXIT_VALUE=$EXIT_ERROR_DUMP fi } function make_clean() { rm -f $LOGFILE } check_params dump_database make_clean exit $EXIT_VALUE