added script for databases
some little fixes in backup.sh
This commit is contained in:
parent
230462cbce
commit
41995c1ef2
2 changed files with 78 additions and 6 deletions
13
backup.sh
13
backup.sh
|
@ -25,9 +25,10 @@ function source_section {
|
|||
line_end=$(expr $(grep -n "$section_end" "$config_name" | cut -d: -f1) - 1)
|
||||
line_diff=$(expr $line_end - $line_start)
|
||||
|
||||
head -n $line_end "$config_name" | tail -n $line_diff > /tmp/backup.tmp
|
||||
source /tmp/backup.tmp
|
||||
rm -f /tmp/backup.tmp
|
||||
tmp_file=$(mktemp)
|
||||
head -n $line_end "$config_name" | tail -n $line_diff > "$tmp_file"
|
||||
source "$tmp_file"
|
||||
rm -f "$tmp_file"
|
||||
}
|
||||
|
||||
# copy file with rsync to server and save last timestamp to logfile
|
||||
|
@ -35,9 +36,9 @@ function rsync_server {
|
|||
filefrom="$1"
|
||||
dirto="$2"
|
||||
logfileentry="$3"
|
||||
#nice -n 19 rsync -rle "ssh -i $keyfile" "$1" "$userserver:$dirto"
|
||||
#nice -n 19 rsync -rle "ssh -i $keyfile" "$filefrom" "$userserver:$dirto"
|
||||
# limit the bandwith
|
||||
nice -n 19 rsync --bwlimit=100000 -rle "ssh -i $keyfile" "$1" "$userserver:$dirto"
|
||||
nice -n 19 rsync --bwlimit=100000 -rle "ssh -i $keyfile" "$filefrom" "$userserver:$dirto"
|
||||
ret=$?
|
||||
if [ $ret -ne 0 ]
|
||||
then
|
||||
|
@ -46,7 +47,7 @@ function rsync_server {
|
|||
echo "$filefrom" | grep ".month." > /dev/null 2>&1
|
||||
ret2=$?
|
||||
# on monthly backups and connection errors there should be no update of logfile
|
||||
if [ $ret2 -ne 0 -a $ret -e 0 ]
|
||||
if [ $ret2 -ne 0 -a $ret -eq 0 ]
|
||||
then
|
||||
sed -e "s/^$logfileentry .*$/${logfileentry} $backup_time/" "$logfile" > "$logfile.tmp"
|
||||
mv -f "$logfile.tmp" "$logfile"
|
||||
|
|
71
backup_db.sh
Executable file
71
backup_db.sh
Executable file
|
@ -0,0 +1,71 @@
|
|||
#!/bin/bash
|
||||
#set -x
|
||||
|
||||
# main configuration
|
||||
script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
config_file="$script_dir/main.cfg"
|
||||
db_dir="$script_dir/db"
|
||||
backupdirsingle=db
|
||||
|
||||
# source a specified section from a specified config
|
||||
function source_section {
|
||||
config_name="$1"
|
||||
section_name="$2"
|
||||
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)
|
||||
|
||||
tmp_file=$(mktemp)
|
||||
head -n $line_end "$config_name" | tail -n $line_diff > "$tmp_file"
|
||||
source "$tmp_file"
|
||||
rm -f "$tmp_file"
|
||||
}
|
||||
|
||||
# copy file with rsync to server and save last timestamp to logfile
|
||||
function rsync_server {
|
||||
filefrom="$1"
|
||||
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"
|
||||
ret=$?
|
||||
if [ $ret -ne 0 ]
|
||||
then
|
||||
echo "problem in rsync: $filefrom"
|
||||
fi
|
||||
}
|
||||
|
||||
# general section from main config
|
||||
source_section "$config_file" "general"
|
||||
|
||||
cd "$db_dir"
|
||||
|
||||
databases=$(nice -n 19 mysql -u root -N -e "show databases;" | grep -v "^information_schema$" | grep -v "^mysql$")
|
||||
for database in $databases
|
||||
do
|
||||
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
|
||||
|
||||
# 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
|
||||
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
|
||||
|
||||
# unmount
|
||||
umount $backupdir_local
|
||||
|
||||
rsync_server "$database.sql.gz" "$backupdir/$backupdirsingle/"
|
||||
|
||||
rm -f "$database.sql.gz"
|
||||
done
|
Loading…
Reference in a new issue