* Florian Lindner [02-07-2008 21:40]: > >Das ist meines Erachtens den Aufwand für ein Backup nicht wert. > > Recht es nicht, wenn die Datenbank gelockt wird? Ich sichere auch im laufenden Betrieb mit lock-all-tables, Skript hänge ich mal an. Gruß Uwe
#!/bin/bash
#
# backup-mysql - Version: 0.1
#
# erstellt Dump von MySQL, täglich rotierent, Sonntag extra
#
# Ansteuerung über /etc/cron.daily/backup-mysql-cron-daily
#
# per Befehl: /path/to/skript daily
#
# und /etc/cron.hourly/backup-mysql-cron-hourly
# (falls jede Stunde gesichert werden soll)
#
# per Befehl: /path/to/skript hourly
#
set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
umask 077
##***********************************************************************
dump_report="root@localhost" # Mailempfänger für Reports
dump_mysqlcnf="/etc/mysql/debian.cnf" # mysql config
dump_dir="/var/local/mysqldump" # Backup-Verzeichnis
dump_prog="/usr/bin/mysqldump" # Programm mysqldump
dump_time="`date +%w`" # day of week (0..6); 0 is Sunday
dump_date="`date +%Y%m%d`" # Datum für jeden Sonntag
dump_hour="`date +%H`" # jede Stunde (00..23)
##***********************************************************************
# check and make backup dir
if [ ! -d "${dump_dir}" ]; then
mkdir -p "${dump_dir}" && ok=1 || ok=0
if [ $ok -eq 0 ] ; then
logger "mysql-backup error: cannot creating ${dump_dir}."
echo -e "$0: cannot creating ${dump_dir}.\n" \
| mail -s "MySQL-Dump: ERROR" ${dump_report}
exit 1
else
logger "mysql-backup: new directory ${dump_dir} created."
echo -e "$0: new directory ${dump_dir} created." \
| mail -s "MySQL-Dump: new directory" ${dump_report}
fi
fi
chmod 700 "${dump_dir}"
# Eine Datei .mount.lock muss im Zielverzeichnis selbst erstellt werden!
# Falls das Verzeichnis - zufaellig oder aus welchen Gruenden auch immer -
# nicht gemountet ist, erfolgt keine Sicherung durch mysqldump!
if [ ! -f "${dump_dir}/.mount.lock" ]; then
logger "mysql-backup error: file ${dump_dir}/.mount.lock not found."
echo -e "${dump_dir}/.mount.lock not found. Please read $0\n" \
| mail -s "MySQL-Dump: ERROR" ${dump_report}
exit 1
fi
# check mysqldump
if [ ! -x "${dump_prog}" ]; then
logger "mysql-backup error: no ${dump_prog} found."
echo -e "${dump_prog} not found. Please read $0\n" \
| mail -s "MySQL-Dump: ERROR" ${dump_report}
exit 1
fi
# check debian.cnf
if [ ! -f "${dump_mysqlcnf}" ]; then
logger "mysql-backup error: no ${dump_mysqlcnf} found."
echo -e "${dump_mysqlcnf} not found. Please read $0\n" \
| mail -s "MySQL-Dump: ERROR" ${dump_report}
exit 1
fi
case "$1" in
daily)
if [ "${dump_time}" = "0" ]; then
# sunday
logger "mysql-backup sunday started."
${dump_prog} --defaults-file="${dump_mysqlcnf}" --all-databases \
--lock-all-tables | gzip > "${dump_dir}/sunday-${dump_date}-sql.gz"
else
# daily
logger "mysql-backup daily started."
${dump_prog} --defaults-file="${dump_mysqlcnf}" --all-databases \
--lock-all-tables | gzip > "${dump_dir}/daily-${dump_time}-sql.gz"
fi
;;
hourly)
logger "mysql-backup hourly started."
${dump_prog} --defaults-file="${dump_mysqlcnf}" --all-databases \
--lock-all-tables | gzip > "${dump_dir}/hour-${dump_hour}-sql.gz"
;;
*)
logger "mysql-backup error: unknown args."
echo -e "unknown args found. Please read $0\n" \
| mail -s "MySQL-Dump: ERROR" ${dump_report}
exit 1
;;
esac
logger "mysql-backup stopped."
exit 0
### eof
Attachment:
signature.asc
Description: Digital signature