BackupManager

Zugang

Es handelt sich um einen LXC-Container. Der Zugang erfolgt über Putty aus dem Nas mit dem folgenden Befehlt:

lxc-console --name BackupManager

Die Konsole kann verlassen werden durch „Strg+A“ und dann „q“.

Durchgeführt Aktivitäten

System aktualisiert und erforderliche Anwendungen installiert mit:

apt-get update
apt-get upgrade
apt install zip nano cron rsyslog sshfs mysql-client

Anschließend erste Testdatei erstellt mit:

zip -r /backups/Web/charts/daily/20200502.zip /NAS/Web/charts/

Ein Shellscript angelegt und mit Nano bearbeitet:

touch /home/backup.sh
nano /home/backup.sh

Nun geht es an das Shell-Script:

#!/bin/bash 

#Tracing einschalten
#set -x

#---------------------
#Globale Variablen
DATE=`date +%d.%m.%Y`
DATETIME=`date +%Y-%m-%d_%H-%M`
#SOURCE="/etc/backupconf/backupsource.list"
BACKUPDIR="/backups"
#OUTPUTDIR="//SENSELESS/BACKUPDIR/$DATE"
#mkdir /$BACKUPDIR/$DATE
#cd /$BACKUPDIR/$DATE
#tar czpf samba_backup_$DATETIME.tar.gz -T $SOURCE
#------------------------------------


#-----------------------------------------------
echo "Positional Parameters"
echo '$0 = ' $0
echo '$1 = ' $1
echo '$2 = ' $2
echo '$3 = ' $3	
#----------------------------------------------

echo 'Punkt1'
backupFreq="$1"
echo 'backupFreq = ' $backupFreq

#So lange es noch Parameter gibt
while [ $# -gt 0 ]
do
  case "$1" in
	-[hH]|-hourly)  backupsubdir="hourly";;
        -[dD]|-daily)   backupsubdir="daily";;
        -[wW]|-weekly)  backupsubdir="weekly";;
	-[mM]|-montly)  backupsubdir="monthly";;
	-[qQ]|quaterly) backupsubdir="quarterly";;
        -[yY]|yearly)   backupsubdir="yearly";;
        -[sS]|special)  backupsubdir="special";;

        -obj=*)         object="${1##-obj=}";;
        -src=*)         src="${1##-src=}";;

        *)              echo "($backupFreq) Unbekannter Parameter"
                        exit 1;;
  esac
  #Nächster Parameter
  shift
done

echo '$backupsubdir = '$backupsubdir
echo '$object = '$object



# Löschen alter Dateien
# Im Daily-Verzeichnis sollen Dateien nur eine gewisse Zeit aufgehoben werden.
# Die alten können daher mit dem folgenden Befehl gelöscht werden:
# Erklärung:
# -name *.zip --> schränkt auf zip-Dateien ein
# -mmin +3    --> findet alle Dateien die seit 3 Minuten nicht geändert wurden
# -mtime +3   --> findet alle Dateien die seit 3 Tagen nicht geändert wurden.
# -type f     --> schränkt auf Dateien ein, sonst werden ggf. auch Verzeichnisse gelöscht
# -exec KOMMANDO {} \;	wendet auf alle Funde den Shellbefehl KOMMANDO an. {} steht dabei 
#                       als Platzhalter für die gefundenen Dateinamen. Das Zeichen ;
#                       terminiert den von find aufzurufenden Shellbefehl. Damit es nicht
#                       unbeabsichtigt von der Shell interpretiert wird,
# rm -rf      --> rekursiv ohne Nachfrage löschen
echo "Löschen alter Dateien"
#stündliche Sicherung wird nach drei Tagen gelöscht
find /backups/hourly     -mtime +2    -type f -exec rm -rf {} \;
find /backups/daily      -mtime +3    -type f -exec rm -rf {} \;
find /backups/weekly     -mtime +31   -type f -exec rm -rf {} \;
find /backups/monthly    -mtime +90   -type f -exec rm -rf {} \;
find /backups/quarterly  -mtime +365  -type f -exec rm -rf {} \;
find /backups/yearly     -mtime +1000 -type f -exec rm -rf {} \;


backupChartFiles()
{
echo "zippe Dateien"

echo "$BACKUPDIR/$backupsubdir/$object_$DATETIME.zip /NAS/Web/charts/"

zip -r ${BACKUPDIR}/${backupsubdir}/${object}_${DATETIME}.zip ${src} > ${BACKUPDIR}/${backupsubdir}/${object}_${DATETIME}.log


#echo 'Sicherung ist abgeschlossen'
#echo 'Sicherung ist abgeschlossen'
logger 'Sicherung wurde durchgeführt'
echo "Zippen fertig"

}

# Backup der Chart-Dateien
backupChartFiles

exit 0

Ich habe nun cron so eingestellt, dass die Sicherung regelmäßig erstellt wird: crontab -e

# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m   h    dom mon          dow   command
# 45   */1 *   *            *     /home/backup.sh

#Sicherung der Charts
  0   */1  *   *            *     /home/backup.sh -h -obj=NAS_Web_charts -src=/NAS/Web/charts
  0   0    *   *            *     /home/backup.sh -d -obj=NAS_Web_charts -src=/NAS/Web/charts
  0   0    1   1,4,7,10     *     /home/backup.sh -q -obj=NAS_Web_charts -src=/NAS/Web/charts
  0   0    1   1            *     /home/backup.sh -y -obj=NAS_Web_charts -src=/NAS/Web/charts


#Sicherung BackupManager
  0   */1  *   *            *     /home/backup.sh -h -obj=BackupManager_home -src=/home/
  0   0    *   *            *     /home/backup.sh -d -obj=BackupManager_home -src=/home/
  0   0    1   1,4,7,10     *     /home/backup.sh -q -obj=BackupManager_home -src=/home/
  0   0    1   1            *     /home/backup.sh -y -obj=BackupManager_home -src=/home/

Der Erfolg kann über das Syslog überprüft werden:

tail -10 /var/log/syslog

SSH-Login auf einem anderen System

Per SSH kann man sich auf einem anderen Server anmelden:

ssh pi@192.168.178.40

Mit der Anwendung sshfs kann ein Verzeichnis eines anderen Systems gemountet werden.

…. Klappt aber noch nicht.

Backup der MariaDB

Hier steht alles zu mysqldump: https://mysqldump.guru/

Ich habe auf dem Backup-System den MySQL-Client installiert (s.o.)

Ich habe nun die Datei ~/.my.cnf erstellt:

nano ~/.my.cnf

In der Datei habe ich die Zugangsdaten des DB-Users hinterlegt

[mysqldump]
user=backup
password=secret

Jetzt ändern wir noch die Rechte von ~/.my.cnf, damit nur root Zugriff hat:

chmod 600 ~/.my.cnf

Beim mysqldump ist nun keine Angabe des Passworts mehr nötig.

Ein Backup-Befehl kann ungefähr so aussehen:

mysqldump -h 192.168.178.45 --quick --skip-lock-tables --all-databases | zip > /backups/mysql/AllDbs.sql.zip

Ohne das –quick bricht die Verarbeitung mit Speichermangel ab.

Das –skip-lock-tables sorgt dafür, dass die Verarbeitung nicht blockiert

Dieses Statement erzeuget einzelne Files pro DB (siehe auch hier):

mysql -h 192.168.178.45 -N -e 'show databases' | while read dbname; do 
mysqldump -h 192.168.178.45 --skip-lock-tables --complete-insert --routines --triggers --single-transaction "$dbname" | zip > /backups/mysql/"$dbname".sql.zip; done

Veröffentlicht

in

von

Schlagwörter:

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert