{{tag>deutsch linux debian backup}}
====== Remote Server Backup NFS ======
Mithilfe des folgenden Scripts können Backups von einem Remote Server auf einen anderen angelegt werden. Hierzu wird NFS genutzt.
===== NFS Storage einbinden =====
apt-get install nfs-common
mkdir /mnt/storage
mount -t nfs host:/pfad /mnt/storage
==== Automount ====
/etc/fstab:
host:/pfad /mnt/storage nfs auto 0 0
===== Backup Script =====
#!/bin/sh
# Remote Server Backup Script v1.6 by PsyCore
# vars
BCF=my.backup.tar
BCF2=sql.backup.tgz
NFSDir="/mnt/storage/backup_dir/"
SQLUser=privileged_user
SQLPass=passw0rd_privileged_user
SUBJECT="my Backup Status"
EMAIL="notification@yourdomain.tld"
EMSG="/tmp/emsg.txt"
ATTACH="/tmp/attach.txt"
DATE=$(date +%u)
EnableFileBackup=1
EnableSQLBackup=1
EnableCronBackup=1
EnableCloudBackup=1
run_date=`date +'%d.%m.%Y %H:%M:%S'`
echo "Backup Status: " >$EMSG
echo "rsync log" >$ATTACH
if [ "$EnableSQLBackup" = "1" ]
then
echo "SQL Backup started " `date +'%d.%m.%Y %H:%M:%S'` >$EMSG
#date +'%d.%m.%Y %H:%M:%S'
mysqldump -u $SQLUser -p$SQLPass --all-databases > root_full.sql
mysqldump -u $SQLUser -p$SQLPass --databases sql1 > sql1.sql
mysqldump -u $SQLUser -p$SQLPass --databases sqlN > sqlN.sql
tar cvfz sql.backup-$DATE.tgz *.sql
cp -u sql.backup-$DATE.tgz /root/backup-database
cp -u sql.backup-$DATE.tgz $NFSDir
fi
# backup cron tasks
if [ "$EnableCronBackup" = "1" ]
then
echo "Cron Backup started " `date +'%d.%m.%Y %H:%M:%S'` >>$EMSG
#date +'%d.%m.%Y %H:%M:%S'
crontab -l > crontab.txt
tar cvfz crontab.tgz *.txt
fi
if [ "$EnableFileBackup" = "1" ]
then
echo "File Backup started " `date +'%d.%m.%Y %H:%M:%S'` >>$EMSG
#date +'%d.%m.%Y %H:%M:%S'
tar cvfz webs.tgz /var/www/dir1 /var/www/dirN
fi
if [ "$EnableCloudBackup" = "1" ]
then
echo "Cloud Backup started " `date +'%d.%m.%Y %H:%M:%S'` >>$EMSG
#date +'%d.%m.%Y %H:%M:%S'
rsync -a -v --exclude-from 'backup-exclude.txt' --stats --delete /usr/share/some-data $NFSDir >> $ATTACH
fi
# archive all
tar cvf $BCF *.tgz
# NFS Storage
cp $BCF $NFSDir
# cleanup
rm -f *.sql
rm -f *.tgz
rm -f *.tar
#rm -f *.txt
# grep "bytes sent" backup.log>>$EMSG
# grep "221 Goodbye" backup.log>>$EMSG
echo "Backup beendet: " `date +'%d.%m.%Y %H:%M:%S'` >> $EMSG
echo " ">>$EMSG
echo "remote storage: ">>$EMSG
echo "==========================">>$EMSG
ls -ashl $NFSDir>>$EMSG
echo "database archive: ">>$EMSG
echo "==========================">>$EMSG
ls -ashl /root/backup-database/>>$EMSG
mail -A $ATTACH -s "$SUBJECT" "$EMAIL" < $EMSG
rm $EMSG
#date +'%d.%m.%Y %H:%M:%S'
# EOF
==== backup-exclude.txt ====
Diese Datei beinhaltet die Ausnahmen, die nicht von rsync kopiert werden sollen.
xxl_sized_directory
this_dir_not
===== Cronjob =====
Um das Script zeitgesteuert zu starten muss ein Cronjob angelegt werden. In diesem Beispiel startet das Script jeden Montag um 12:00 Uhr. Die Ausgabe des Scripts wird in ein Logfile umgeleitet.
# m h dom mon dow command
0 12 * * 1 /home/user/backup.sh > /home/user/backup.log