#! /bin/sh # This file is part of BEAM # Copyright (C) 2012 Sergey Poznyakoff # # BEAM is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # BEAM is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with BEAM. If not, see . # Configuration keywords: # # item_type=mysql [mandatory] # item_database=STRING [optional] # item_defaults_file=STRING [optional] # # mysql_check item mysql_check() { return 0 } # mysql_list item prefix mysql_list() { local database eval database=\$${1}_database if [ -z "$database" ]; then echo "${2}all MySQL databases" else echo "${2}MySQL database $database" fi } # mysql_backup item mysql_backup() { local database eval database=\$${1}_database if [ -z "$database" ]; then logit "backing up all MySQL databases" else logit "backing up MySQL database $database" fi cmd="mysqldump" eval defaults_file=\$${1}_defaults_file if [ -n "$defaults_file" ]; then cmd="$cmd --defaults-file=$defaults_file" fi cmd="$cmd --add-drop-database" if test -z "$database"; then cmd="$cmd --all-databases" else cmd="$cmd --databases" fi if [ -z "$dry_run" ]; then $cmd $database > $backup_tmp_dir/$1-$week-$round-$level else echo "$cmd $database > $backup_tmp_dir/$1-$week-$round-$level" fi if [ $? -ne 0 ]; then tarerror=$((tarerror + 1)) logit "failed" else logit "creating $1-$week-$round-$level.$tar_suffix" $dry_run tar $verbose $taroptions \ -f $backup_archive_dir/$1-$week-$round-$level.$tar_suffix \ -C $backup_tmp_dir $1-$week-$round-$level tarcode $? $dry_run rm $backup_tmp_dir/$1-$week-$round-$level fi } mysql_restore() { local u database eval database=\$${1}_database logit "restoring MySQL database $database" u=$(umask) trap "umask $u" 1 2 3 13 15 umask 077 $dry_run tar $verbose $taroptions \ -f $backup_archive_dir/$1-$week-$round-$level.$tar_suffix e=$? tarcode $e if [ $e -eq 0 ]; then logit "restoring database from the dump" # Stupid lossage: cannot give -A option here, because with it mysql # refuses to understand defaults-file. cmd="mysql" eval defaults_file=\$${1}_defaults_file if [ -n "$defaults_file" ]; then cmd="$cmd --defaults-file=$defaults_file" fi if [ -n "$dry_run" ]; then echo "$cmd < $1-$week-$round-$level" elif [ -r $1-$week-$round-$level ]; then $cmd < $1-$week-$round-$level > db-$1.log if grep ERROR db-$1.log >/dev/null; then error "errors occurred during restore; see db-$1.log for details" error "dump preserved in file $1-$week-$round-$level" tarerror=$((tarerror + 1)) else rm $1-$week-$round-$level fi fi fi umask $u trap - 1 2 3 13 15 }