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