diff options
-rwxr-xr-x | backup_db.sh | 81 |
1 files changed, 62 insertions, 19 deletions
diff --git a/backup_db.sh b/backup_db.sh index 501d9d8..840e6d9 100755 --- a/backup_db.sh +++ b/backup_db.sh @@ -1,6 +1,49 @@ #!/bin/bash #set -x +# get path to all needed tools +# /bin +echo=$(which echo) +gzip=$(which gzip) +grep=$(which grep) +mktemp=$(which mktemp) +mv=$(which mv) +pwd=$(which pwd) +rm=$(which rm) +umount=$(which umount) +# /usr/bin +cut=$(which cut) +dirname=$(which dirname) +expr=$(which expr) +head=$(which head) +mysql=$(which mysql) +mysqldump=$(which mysqldump) +nice=$(which nice) +rsync=$(which rsync) +seq=$(which seq) +ssh=$(which ssh) +sshfs=$(which sshfs) +tail=$(which tail) + +# check if all needed tools are installed (only the ones not installed under /bin/) +alltoolsinstalled="yes" +test "$cut" = "" && echo "'cut' not installed or not found by 'which'" && alltoolsinstalled="no" +test "$dirname" = "" && echo "'dirname' not installed or not found by 'which'" && alltoolsinstalled="no" +test "$expr" = "" && echo "'expr' not installed or not found by 'which'" && alltoolsinstalled="no" +test "$head" = "" && echo "'head' not installed or not found by 'which'" && alltoolsinstalled="no" +test "$mysql" = "" && echo "'mysql' not installed or not found by 'which'" && alltoolsinstalled="no" +test "$mysqldump" = "" && echo "'mysqldump' not installed or not found by 'which'" && alltoolsinstalled="no" +test "$nice" = "" && echo "'nice' not installed or not found by 'which'" && alltoolsinstalled="no" +test "$rsync" = "" && echo "'rsync' not installed or not found by 'which'" && alltoolsinstalled="no" +test "$ssh" = "" && echo "'ssh' not installed or not found by 'which'" && alltoolsinstalled="no" +test "$sshfs" = "" && echo "'sshfs' not installed or not found by 'which'" && alltoolsinstalled="no" +test "$tail" = "" && echo "'tail' not installed or not found by 'which'" && alltoolsinstalled="no" + +if [ "$alltoolsinstalled" = "no" ] +then + exit 1 +fi + # main configuration script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" config_file="$script_dir/main.cfg" @@ -16,14 +59,14 @@ function source_section { section_start="^\[$section_name\]$" section_end="^\[/$section_name\]$" - line_start=$(grep -n "$section_start" "$config_name" | cut -d: -f1) - line_end=$(expr $(grep -n "$section_end" "$config_name" | cut -d: -f1) - 1) - line_diff=$(expr $line_end - $line_start) + line_start=$($grep -n "$section_start" "$config_name" | $cut -d: -f1) + line_end=$($expr $($grep -n "$section_end" "$config_name" | $cut -d: -f1) - 1) + line_diff=$($expr $line_end - $line_start) - tmp_file=$(mktemp) - head -n $line_end "$config_name" | tail -n $line_diff > "$tmp_file" + tmp_file=$($mktemp) + $head -n $line_end "$config_name" | $tail -n $line_diff > "$tmp_file" source "$tmp_file" - rm -f "$tmp_file" + $rm -f "$tmp_file" } # copy file with rsync to server @@ -32,11 +75,11 @@ function rsync_server { dirto="$2" #nice -n 19 rsync -rle "ssh -i $keyfile" "$filefrom" "$userserver:$dirto" # limit the bandwith - nice -n 19 rsync --bwlimit=100000 -rle "ssh -i $keyfile" "$filefrom" "$userserver:$dirto" + $nice -n 19 $rsync --bwlimit=100000 -rle "$ssh -i $keyfile" "$filefrom" "$userserver:$dirto" ret=$? if [ $ret -ne 0 ] then - echo "problem in rsync: $filefrom" + $echo "problem in rsync: $filefrom" fi } @@ -47,33 +90,33 @@ source_section "$config_file" "general" cd "$db_dir" # get all databases -databases=$(nice -n 19 mysql -u root -N -e "show databases;" | grep -v "^information_schema$" | grep -v "^mysql$" | grep -v "^performance_schema$") +databases=$($nice -n 19 $mysql -u root -N -e "show databases;" | $grep -v "^information_schema$" | $grep -v "^mysql$" | $grep -v "^performance_schema$") # handle each database for database in $databases do # dump and gzip database - nice -n 19 mysqldump -u root "$database" > "$database.sql" - nice -n 19 gzip "$database.sql" + $nice -n 19 $mysqldump -u root "$database" > "$database.sql" + $nice -n 19 $gzip "$database.sql" # mount for renaming - sshfs $userserver:$backupdir $backupdir_local -o IdentityFile=$keyfile -o IdentitiesOnly=yes + $sshfs $userserver:$backupdir $backupdir_local -o IdentityFile=$keyfile -o IdentitiesOnly=yes # rotate old backups for count in `seq 7 -1 2` do - count_last=$(expr $count - 1) - rm -f "$backupdir_local/$backupdirsingle/$database.sql.gz.$count" - mv -f "$backupdir_local/$backupdirsingle/$database.sql.gz.$count_last" "$backupdir_local/$backupdirsingle/$database.sql.gz.$count" > /dev/null 2>&1 + count_last=$($expr $count - 1) + $rm -f "$backupdir_local/$backupdirsingle/$database.sql.gz.$count" + $mv -f "$backupdir_local/$backupdirsingle/$database.sql.gz.$count_last" "$backupdir_local/$backupdirsingle/$database.sql.gz.$count" > /dev/null 2>&1 done - rm -f "$backupdir_local/$backupdirsingle/$database.sql.gz.1" - mv -f "$backupdir_local/$backupdirsingle/$database.sql.gz" "$backupdir_local/$backupdirsingle/$database.sql.gz.1" > /dev/null 2>&1 + $rm -f "$backupdir_local/$backupdirsingle/$database.sql.gz.1" + $mv -f "$backupdir_local/$backupdirsingle/$database.sql.gz" "$backupdir_local/$backupdirsingle/$database.sql.gz.1" > /dev/null 2>&1 # unmount - umount $backupdir_local + $umount $backupdir_local rsync_server "$database.sql.gz" "$backupdir/$backupdirsingle/" # delete temporary file - rm -f "$database.sql.gz" + $rm -f "$database.sql.gz" done # for database in $databases |