Benutzer-Werkzeuge

Webseiten-Werkzeuge


open:it:backup

Backup

Scripte Remote-System

Die sh-Dateien nicht mit Windows-GUI erstellen, da sich hier ggf. unsichtbare Sonderzeichen einschleichen, die die Funktion beeinträchtigen.

Dateien

sudo nano /<PFAD>/backup.sh
#!/bin/bash
SOURCE="/etc/apache2/sites-available/ "
BACKUP_DIR="/<PFAD>/daten"
mkdir -p ${BACKUP_DIR}
cp -p -u -r ${SOURCE} ${BACKUP_DIR}
exit

Ersetzen: SOURCE, <PFAD>
Leerzeichen am Ende der SOURCE!
Verzeichnis wird angelegt, sofern nicht existent.

Parameter für cp (copy)
-p oder - -preserve ⇒ Attribute der Originaldatei werden beim Kopieren vererbt
- -preserve=timestamp ⇒ Zeitstempel der Originaldatei wird beim Kopieren vererbt
-r oder -R oder - -recurcive ⇒ Verzeichnisse inkl. Unterverzeichnisse
-u oder - -update ⇒ Kopiert die Datei nur, wenn die Zieldatei älter als das Original ist
-v oder - -verbose ⇒ Gibt nach dem Kopiervorgang eine Meldung aus
Werden (nur) einzelne Dateien kopiert, müssen die Zielverzeichnisse bereits existieren!

Siehe auch UbuntuUsers

Systemdateien können ggf. nur durch root gesichert werden (z.B let's-Encrypt-Zertifikate). Wird die Sicherung wie unten beschrieben automatisiert durchgeführt, erfolgt der Zugriff durch root und sollte problemlos klappen. Beim externen Abholen als „normaler User“ könnte es dann aber Zugriffsprobleme geben. Durch Packen der Daten ins Home-Verzeichnis des <USERS> kann man das Problem umgehen, da dann Zugriff auf die gepackten Daten besteht.

Daten packen

sudo nano /<PFAD>/backup_gepackt.sh
#!/bin/bash
SOURCE="/var/www/data/ "
BACKUP_DIR="/<PFAD>/daten"
mkdir -p ${BACKUP_DIR}
tar -cpzf ${BACKUP_DIR}/backup_data.tar.gz ${SOURCE}
exit

Ersetzen: SOURCE, <PFAD>
Leerzeichen am Ende der SOURCE!
Entpacken (in aktuelles Verzeichnis):

tar -xf backup_gepackt.tar.gz

Parameter für tar (tape archiver)
Siehe auch Ubunutuusers
-c Neues Archiv erzeugen.
-p Zugriffsrechte beim Extrahieren erhalten.
-z Archiv zusätzlich mit gzip (de-)komprimieren.
-x Dateien aus einem Archiv extrahieren.
-f Archiv in angegebene Datei schreiben / Daten aus angegebener Datei lesen. Diese Option muss die letzte sein, da die nachfolgende Zeichen als Datei interpretiert werden.

Datenbanken

sudo nano /<PFAD>/backup_dbase.sh
#!/bin/bash
BACKUP_DIR="/<PFAD>/dbase"
DAY=$(date +%d)
USER="<BENUTZER>"
PW="<PASSWORT>"
mkdir -p ${BACKUP_DIR}
DBASE="<DATENBANK>"
mysqldump -u${USER} -p${PW} ${DBASE} > ${BACKUP_DIR}/${DBASE}-${DAY}.sql
exit

Ersetzen: <PFAD>, <BENUTZER>, <PASSWORT>, <DATENBANK>
Hier Beispielhaft für eine Datenbank. Die beiden Zeilen „DBASE= ….“ und „mysqldump ….“ einfach vervielfältigen um weitere Datenbanken zu sichern. Bei <BENUTZER> und <PASSWORD> handelt es sich um einen User mit Rechten für die MySQL-Datenbank.

Legt bis zu 31 Sicherungen an, jeweils mit Tagesdatum.
Keine Angabe von Monat oder Jahr.
Bei demselben Datum wird überschrieben.

(Zurück)Importieren über Konsole:

mysql -u <BENUTZER> -p <DATENBANK> < <SQL-FILE>.sql;

Ersetzen: <BENUTZER>, <DATENBANK>, <SQL-FILE>
Die Zeichen „größer-als“ (>) und „kleiner als“ (<) entscheiden über die Schreibrichtung. Zu lesen wie ein Pfeil - hier also von der Datei in die Datenbank.

Backup ausführen

Scripte ausführbar machen (hier alle .sh-Dateien im angegebenen Verzeichnis):

sudo chmod +x /<PFAD>/*.sh

Script manuell ausführen:

sudo bash /<PFAD>/backup.sh

Automatisiert als root ausführen über Cronjob

sudo nano /etc/crontab 
# /etc/crontab                #system-wide crontab
0 4 * * *	root	/PFAD/backup_dbase.sh
0 3 1 * *	root	/PFAD/backup.sh
0 3 2 * *	root	/PFAD/backup_gepackt.sh

Ausführung:

  • jeden Tag um 4:00 Uhr → Datenbank(en)
  • jeden 1. Tag im Monat um 3:00 Uhr → Dateien
  • jeden 2. Tag im Monat um 3:00 Uhr → Dateien packen

Daten auf lokalen PC kopieren

Von einem lokalen Debian-/Linux-System kann das Backup des Remote-Systems abgeholt/kopiert werden. Der Login auf den Remote-Server muss mit einer SSH-Zertifikatsdatei ohne Passwort für den im Cronjob stehenden User realisiert sein.

sudo nano /<PFAD>/backup_externer_server.sh
#!/bin/bash
scp -r <USERNAME>@<REMOTESERVER>:/<PFADEXTERN>/ /<PFADLOKAL>/
exit

Ersetzen: <PFADEXTERN>, <PFADLOKAL>, <USERNAME>, <REMOTESERVER> (IP-Adresse)
Sind lokaler User und Remoteuser identisch, kann „<USERNAME>@“ entfallen.
scp = Kopieren über gesicherte ssh-Verbindung
-r = Kopieren inkl. aller Unterverzeichnisse

Die (angepasste) Zeile „scp -r ….“ kann zur manuellen Ausführung direkt als Befehl auf der Konsole eingegeben werden

Automatisiert über Cronjob

Voraussetzung: der ausführende PC muss zu der Zeit in Betrieb sein

sudo nano /etc/crontab 
# /etc/crontab: system-wide crontab
0 4 * * 7               <USERNAME>      /<PFAD>/backup_externer_server.sh

Ausführung:

  • jeden 7. Tag der Woche (Sonntag) um 4:00 Uhr

Achtung: Es kann nur kopiert werden, wenn auch Zugriff von <USERNAME> auf die externen Dateien besteht. Sollen z.B. die letsencrypt-Zertifikate kopiert werden, dann müssen hierfür am externen System Zugriffsrechte vorliegen. Bei meinen Einstellungen wird das Backup auf dem entfernten System (als root über cronjob) in „mein“ Home-Verzeichnis geschrieben, aber trotzdem hat mein User keinen Zugriff auf die Verzeichnisse der Zertifikate. Lösung → Dateien vorher packen, siehe oben.

Diskussion

Geben Sie Ihren Kommentar ein. Wiki-Syntax ist zugelassen:
O J L L I
 
open/it/backup.txt · Zuletzt geändert: 2024/02/08 14:08 von Kai