linux:backup:server-backup-nfs

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
linux:backup:server-backup-nfs [2017/11/23 12:41] – angelegt psycorelinux:backup:server-backup-nfs [2024/01/12 22:17] – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +{{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 =====
 +
 +<code bash>
 +apt-get install nfs-common
 +mkdir /mnt/storage
 +mount -t nfs host:/pfad /mnt/storage
 +</code>
 +
 +==== Automount ====
 +
 +/etc/fstab:
 +
 +<code text>
 +host:/pfad       /mnt/storage       nfs       auto             0
 +</code>
 +
 +===== Backup Script =====
 +
 +<code bash>
 +#!/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
 +</code>
 +
 +==== backup-exclude.txt ====
 +
 +Diese Datei beinhaltet die Ausnahmen, die nicht von rsync kopiert werden sollen.
 +
 +<code text>
 +xxl_sized_directory
 +this_dir_not
 +</code>
 +
 +===== 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.
 +
 +<code bash>
 +# m h  dom mon dow   command
 +0 12 * * 1 /home/user/backup.sh > /home/user/backup.log
 +</code>