[S]Tips, hilfe beim Backup Script

time-walker

New Member
Ich bin gerade dabei mein Backup script zu schreiben...

weiter unten findet ihr meine Script, welche auf Basis von diesem Howto aufgebaut wurde...
Heinlein - Professional Linux Support GmbH - Howto: Backups mit rsync

Was ich noch gerne hätte ist das backup zu verschlüsseln.

Ich habe mein backup nun abgeändert damit das backup local abgespeichert wird. Aber ich habe einen FTP Server der intern erreichbar ist.
Somit würde ich es gerne ins Dateiverzeichnis Mounten.
Habe mir gestern Curlftpfs angeschaut, leider ist es aber etwas bugy...

Habt ihr sonst erfahrungen oder vorschläge ??


Aktuellerstand:

Code:
#!/bin/bash
#
# Script zieht per rsync Backups
# http://www.heinlein-partner.de
#
# Aufruf: backup-rsync <fqdn-servername>
#

# ### Aufrufparameter des Scripts ist ein FQDN-Hostname
if [ -n "$1" ] ; then
	SERVER="$1"
else
	echo "Error: Usage $0 <fqdn-hostname>"
	exit
fi

#VARIABLEN	
MYSQLADMIN=""
MYSQLPASS=""
datum=$(date +%d-%m-%G)

# ### Konfiguration
# Sollen wir pruefen, ob noch ein gewisser Prozentsatz 
# an Plattenplatz und Inodes frei ist?
CHECK_HDMINFREE=true
HDMINFREE=95

# Unter welchem Pfad wird gesichert?
DATA_PATH=/BACKUP

# Liste von Dateipattern, die nicht gebackupt werden sollen
EXCLUDES=/etc/.exclude_backup

# Weitere Optionen für rsync. Ggf. macht eine Limitierung 
# der Bandbreite Sinn, Angabe in kbyte/sec:
# EXTRAOPT="--bwlimit=256"
EXTRAOPT=""


# ### Let´s Rock`n`Roll

# Pruefe auf freien Plattenplatz
GETPERCENTAGE='s/.* \([0-9]\{1,3\}\)%.*/\1/'
if $CHECK_HDMINFREE ; then
	KBISFREE=`df /$DATA_PATH | tail -n1 | sed -e "$GETPERCENTAGE"`
	INODEISFREE=`df -i /$DATA_PATH | tail -n1 | sed -e "$GETPERCENTAGE"`
	if [ $KBISFREE -ge $HDMINFREE -o $INODEISFREE -ge $HDMINFREE ] ; then
		echo "Fatal: Not enough space left for rsyncing backups!"
		logger "Fatal: Not enough space left for rsyncing backups!"
		exit
	fi
fi

# Ggf. Verzeichnis anlegen
if ! [ -d $DATA_PATH/$SERVER/weekly.1/daily.1 ] ; then
        mkdir -p $DATA_PATH/$SERVER/weekly.1/daily.1
fi

# Los geht`s: rsync zieht ein Vollbackup
echo "Starting rsync backup from $SERVER..."
logger "Starting rsync backup from $SERVER..."


rsync  -avz --numeric-ids --delete --delete-excluded   \
        --exclude-from="$EXCLUDES"  $EXTRAOPT                   \
        /$DATA_PATH/$SERVER/weekly.1/daily.1

# MYSQL Backup Jede Datenbank Einzeln
for i in $(mysql -u$MYSQLADMIN -p$MYSQLPASS -Bs -e "show databases")
do
     mysqldump -u$MYSQLADMIN -p$MYSQLPASS --opt --quote-names --triggers --routines --flush-logs --force --delete-master-logs --master-data "$i" | bzip2 -c > 
"$DATA_PATH/weekly.1/daily.1/MySQL" >/dev/null 2>&1
done
echo "MySQL-Dump done..."
logger "MySQL-Dump done..."


# Rückgabewert prüfen.
# 0 = fehlerfrei, 
# 24 ist harmlos; tritt auf, wenn während der Laufzeit
# von rsync noch (/tmp?) Dateien verändert oder gelöscht wurden.
# Alles andere ist fatal -- siehe man (1) rsync
if ! [ $? = 24 -o $? = 0 ] ; then
	echo "Fatal: rsync finished $SERVER with errors!"
	logger "Fatal: rsync finished $SERVER with errors!"
fi

# Verzeichnis anfassen, um Backup-Datum zu speichern
touch $DATA_PATH/$SERVER/weekly.1/daily.1

# Fertig!
echo "Finished rsync backup from $SERVER..."
logger "Finished rsync backup from $SERVER..."

# Sicher ist sicher...
sync

exclude_backup
Code:
/proc/*
/tmp/*
/backup/*

backup_retate.sh
Code:
#!/bin/bash
#
# Script rotiert Backup-Verzeichnisse
# http://www.heinlein-partner.de
#
# Aufruf: backup-rotate <fqdn-servername>
#

# ### Aufrufparameter des Scripts ist ein FQDN-Hostname
if [ -n "$1" ] ; then
	SERVER="$1"
else
	echo "Error: Usage $0 <fqdn-hostname>"
	exit
fi

# ### Konfiguration
# Sollen wir pruefen, ob noch ein gewisser Prozentsatz
# an Plattenplatz und Inodes frei ist?
CHECK_HDMINFREE=true
HDMINFREE=95

# Unter welchem Pfad wird gesichert?
DATA_PATH=/BACKUP

# ### Let`s Rock`n`Roll....

# Pruefe auf freien Plattenplatz
GETPERCENTAGE='s/.* \([0-9]\{1,3\}\)%.*/\1/'
if $CHECK_HDMINFREE ; then
	KBISFREE=`df /$DATA_PATH | tail -n1 | sed -e "$GETPERCENTAGE"`
	INODEISFREE=`df -i /$DATA_PATH | tail -n1 | sed -e "$GETPERCENTAGE"`
	if [ $KBISFREE -ge $HDMINFREE -o $INODEISFREE -ge $HDMINFREE ] ; then
		echo "Fatal: Not enough space left for rotating backups!"
		logger "Fatal: Not enough space left for rotating backups!"
		exit
	fi
fi

# Ggf. Verzeichnis anlegen
if ! [ -d $DATA_PATH/$SERVER/weekly.1/daily.1 ] ; then
        mkdir -p $DATA_PATH/$SERVER/weekly.1/daily.1
fi

echo "Rotating snapshots of $SERVER..."
logger "Rotating snapshots of $SERVER..."

# Das hoechste Snapshot abloeschen
if [ -d $DATA_PATH/$SERVER/weekly.1/daily.8 ] ; then
        rm -rf $DATA_PATH/$SERVER/weekly.1/daily.8
fi

# Alle anderen Snapshots eine Nummer nach oben verschieben
for OLD in 7 6 5 4 3 2  ; do
        if [ -d $DATA_PATH/$SERVER/weekly.1/daily.$OLD ] ; then
	        NEW=$[ $OLD + 1 ]
		# Datum sichern
		touch $DATA_PATH/weekly.1/.timestamp -r $DATA_PATH/$SERVER/weekly.1/daily.$OLD
                mv $DATA_PATH/$SERVER/weekly.1/daily.$OLD $DATA_PATH/$SERVER/weekly.1/daily.$NEW
		# Datum zurueckspielen
		touch $DATA_PATH/$SERVER/weekly.1/daily.$NEW -r $DATA_PATH/weekly.1/.timestamp
        fi
done

# Snapshot von Level-0 per hardlink-Kopie nach Level-1 kopieren
if [ -d $DATA_PATH/$SERVER/weekly.1/daily.1 ] ; then
        cp -al $DATA_PATH/$SERVER/weekly.1/daily.1 $DATA_PATH/$SERVER/weekly.1/daily.2
fi

backup-rotate-weekly
Code:
#!/bin/bash
#
# Script rotiert Backup-Verzeichnisse
# http://www.heinlein-partner.de
#
# Aufruf: backup-rotate <fqdn-servername>
#

# ### Aufrufparameter des Scripts ist ein FQDN-Hostname
if [ -n "$1" ] ; then
	SERVER="$1"
else
	echo "Error: Usage $0 <fqdn-hostname>"
	exit
fi

# ### Konfiguration
# Sollen wir pruefen, ob noch ein gewisser Prozentsatz
# an Plattenplatz und Inodes frei ist?
CHECK_HDMINFREE=true
HDMINFREE=95

# Unter welchem Pfad wird gesichert?
DATA_PATH=/BACKUP

# ### Let`s Rock`n`Roll....

# Pruefe auf freien Plattenplatz
GETPERCENTAGE='s/.* \([0-9]\{1,3\}\)%.*/\1/'
if $CHECK_HDMINFREE ; then
	KBISFREE=`df /$DATA_PATH | tail -n1 | sed -e "$GETPERCENTAGE"`
	INODEISFREE=`df -i /$DATA_PATH | tail -n1 | sed -e "$GETPERCENTAGE"`
	if [ $KBISFREE -ge $HDMINFREE -o $INODEISFREE -ge $HDMINFREE ] ; then
		echo "Fatal: Not enough space left for rotating backups!"
		logger "Fatal: Not enough space left for rotating backups!"
		exit
	fi
fi

# Ggf. Verzeichnis anlegen
if ! [ -d $DATA_PATH/$SERVER/weekly.1/ ] ; then
        mkdir -p $DATA_PATH/$SERVER/weekly.1
fi

echo "Rotating snapshots of $SERVER..."
logger "Rotating snapshots of $SERVER..."

# Das hoechste Snapshot abloeschen
if [ -d $DATA_PATH/$SERVER/weekly.5 ] ; then
        rm -rf $DATA_PATH/$SERVER/weekly.5
fi

# Alle anderen Snapshots eine Nummer nach oben verschieben
for OLD in 4 3 2  ; do
        if [ -d $DATA_PATH/$SERVER/weekly.$OLD ] ; then
	        NEW=$[ $OLD + 1 ]
		# Datum sichern
		touch $DATA_PATH/.timestamp -r $DATA_PATH/$SERVER/weekly.$OLD
                mv $DATA_PATH/$SERVER/weekly.$OLD $DATA_PATH/$SERVER/weekly.$NEW
		# Datum zurueckspielen
		touch $DATA_PATH/$SERVER/weekly.$NEW -r $DATA_PATH/.timestamp
        fi
done

# Snapshot von Level-0 per hardlink-Kopie nach Level-1 kopieren
if [ -d $DATA_PATH/$SERVER/weekly.1 ] ; then
        cp -al $DATA_PATH/$SERVER/weekly.1 $DATA_PATH/$SERVER/weekly.2
fi
 
Back
Top