* 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