Inhaltsverzeichnis
Backup
Siehe auch: https://www.ionos.de/digitalguide/server/tools/backup-mit-tar-so-erstellen-sie-archive-unter-linux/
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