Benutzer-Werkzeuge

Webseiten-Werkzeuge


open:it:backup

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
open:it:backup [2024/07/22 08:24] – [Backup automatisieren] Kaiopen:it:backup [2025/05/13 09:28] (aktuell) Kai
Zeile 1: Zeile 1:
 ====== Backup ====== ====== Backup ======
 +Hier werden zwei unterschiedliche Konzepte diskutiert. \\
 +BorgBackup ist eine einfache OSS Lösung um zum Beispiel eine Remote-Storagebox (hier von Hetzner) als Speichermedium zu nutzen. Man muss sich jedoch auch bewusst sein, dass durch Borg jede Datei genau einmal gespeichert wird. Sollte eine Datei z.B. durch einen Festplattenfehler beschädigt sein, ist diese in allen Backups beschädigt. Deshalb gehört es zum Best Practice sehr wichtige Daten in mehr als einem Repository zu speichern! \\
 +Neben Borg wird ein mit eigenen Scripten erstelltes Backup vorgestellt, dass jedes einzeln durchgeführte Backup wieder herstellen kann, da es vorherige nicht überschreibt. Der Nachteil hierbei ist, dass der Speicherbedarf kontinuierlich anwächst((in dem Rahmen, in dem es Änderungen am Datenbestand gab)). Hierbei ist also eine regelmäßige manuelle Wartung erforderlich.
  
 ===== BorgBackup ===== ===== BorgBackup =====
-[[https://www.borgbackup.org/|BorgBackup]] (kurz: Borg) free and open source software, ist ein deduplizierendes Backupprogramm. Optional wird Kompression und authentifizierte Verschlüsselung unterstützt. \\ +++++ Quellen: |
-Die Deduplizierung sorgt bei Borg Backups für einen sehr effizienten Speicherverbrauch und hohe Geschwindigkeit. Man muss sich jedoch auch bewusst sein, dass dadurch jede Datei genau einmal gespeichert wird. Sollte eine Datei z.B. durch einen Festplattenfehler beschädigt sein, ist diese in allen Backups beschädigt. Deshalb gehört es zum Best Practice sehr wichtige Daten in mehr als einem Repository zu speichern! \\ +
- +
-Quellen & Tutorials:+
   * [[https://borgbackup.readthedocs.io/en/1.4-maint/installation.html|Borg - Installation]]   * [[https://borgbackup.readthedocs.io/en/1.4-maint/installation.html|Borg - Installation]]
   * [[https://borgbackup.readthedocs.io/en/1.4-maint/quickstart.html|Borg - Quick Start]]   * [[https://borgbackup.readthedocs.io/en/1.4-maint/quickstart.html|Borg - Quick Start]]
   * [[https://community.hetzner.com/tutorials/install-and-configure-borgbackup/de|Hetzner - BorgBackup]]   * [[https://community.hetzner.com/tutorials/install-and-configure-borgbackup/de|Hetzner - BorgBackup]]
 +++++
  
 +[[https://www.borgbackup.org/|BorgBackup]] (kurz: Borg) ist ein deduplizierendes Backupprogramm. Optional wird Kompression und authentifizierte Verschlüsselung unterstützt. \\
 +Die Deduplizierung sorgt bei Borg Backups für einen sehr effizienten Speicherverbrauch und hohe Geschwindigkeit. \\
 + 
 Bei diesem Beispiel wurde ein externe Storage-Box von Hetzner eingesetzt (your-storagebox.de). Der User u123456 muss entsprechend Vorgaben der Storage-Box angepasst werden. \\ Bei diesem Beispiel wurde ein externe Storage-Box von Hetzner eingesetzt (your-storagebox.de). Der User u123456 muss entsprechend Vorgaben der Storage-Box angepasst werden. \\
 Soll das Backup auf einem lokalen Laufwerk oder Verzeichnis gesichert werden, ist der Pfad:  Soll das Backup auf einem lokalen Laufwerk oder Verzeichnis gesichert werden, ist der Pfad: 
Zeile 19: Zeile 23:
   sudo apt install borgbackup   sudo apt install borgbackup
  
-Key generieren (sofern nicht bereits vorhanden) und auf Storage-Box übertragen, um Zugang ohne Passwort zu gewährleisten+==== Schlüssel tauschen ==== 
 +Key generieren (sofern nicht bereits vorhanden) und auf Storage-Box übertragen, um Zugang ohne Passwort zu gewährleisten. Soll später ein automatisiertes Script Verbindung zum Backup-Server als User root aufnehmen, dann muss auch der (Passwortfreie) Zugriff für root ermöglicht werden. \\
   ssh-keygen -t rsa -b 4096   ssh-keygen -t rsa -b 4096
  
Zeile 41: Zeile 46:
   ssh -p23 u123456@u123456.your-storagebox.de mkdir -p backups/mctest   ssh -p23 u123456@u123456.your-storagebox.de mkdir -p backups/mctest
  
-Backup-Ordner auf der Storage-Box initialisieren+Backup-Ordner auf der Storage-Box initialisieren. Passwort wird abgefragt. Auf einer sicheren Storagebox wäre das doppelte Sicherheit, kann daher ggf. ohne Passwort erfolgen > dann einfach leerlassen. Muss individuell und fallabhängig entschieden werden. Für sicherheitsrelevante Daten ist es vermutlich angezeigt, ein Passwort zu vergeben.
   borg init --encryption=repokey ssh://u123456@u123456.your-storagebox.de:23/./backups/mctest   borg init --encryption=repokey ssh://u123456@u123456.your-storagebox.de:23/./backups/mctest
  
Zeile 64: Zeile 69:
 Liste Dateien eines Backups in eine Text-Datei schreiben Liste Dateien eines Backups in eine Text-Datei schreiben
   borg list ssh://u123456@u123456.your-storagebox.de:23/./backups/mctest::test1 > contents.txt   borg list ssh://u123456@u123456.your-storagebox.de:23/./backups/mctest::test1 > contents.txt
 +
 +Optionen: nur Pfad und Dateiname, sortiert
 +  borg list --short ssh://u123456@u123456.your-storagebox.de:23/./backups/mctest::test1 > contents.txt  | sort
  
 ==== Daten wiederherstellen ==== ==== Daten wiederherstellen ====
Zeile 74: Zeile 82:
   borg extract ssh://u123456@u123456.your-storagebox.de:23/./backups/mctest::test1 /home/me/Downloads/test.txt   borg extract ssh://u123456@u123456.your-storagebox.de:23/./backups/mctest::test1 /home/me/Downloads/test.txt
  
-==== Backups löschen ==== +==== Backups manuell löschen ==== 
-Backups für diesen PC (hier mctest) auflisten+Backups eines Archives auflisten
   borg list ssh://u123456@u123456.your-storagebox.de:23/./backups/mctest   borg list ssh://u123456@u123456.your-storagebox.de:23/./backups/mctest
  
Zeile 83: Zeile 91:
 Alle Backups zu einem Server/PC löschen (hier mctest) Alle Backups zu einem Server/PC löschen (hier mctest)
   borg delete ssh://u123456@u123456.your-storagebox.de:23/./backups/mctest   borg delete ssh://u123456@u123456.your-storagebox.de:23/./backups/mctest
 +
 +==== Backups auomatisiert löschen ====
 +Damit der Speicherplatz mit der Zeit nicht verbraucht wird, sollten regelmäßig, automatisiert ältere Backups gelöscht werden - Befehl: **prune**. Dadurch ist allerdings noch kein Speicherplatz freigegeben. Dazu benötigt es zusätzlich den Befehl: **compact**. \\
 +
 +  borg prune --dry-run -v --list --keep-within=1d --keep-daily=7 --keep-weekly=4 --keep-monthly=12 ssh://u123456@u123456.your-storagebox.de:23/./backups/mctest
 +
 +Dieser Befehl (mit --dry-run) zeigt die Backups/Archive an, die entsprechend folgender Bedingungen gelöscht würden. \\
 +Bedingungen in diesem Beispiel: 7 aus den letzten Tagen, 4 der letzten Wochen und 12 der letzten Monate. \\
 +Das System identifiziert dies automatisch. \\
 +
 +Pfad und Zugangsdaten anpassen. \\
 +O.a. Code führt nur einen Trockenlauf aus. \\
 +Scharfschaltung: den Code ohne "--dry-run". \\
 +
 +Freigeben des nicht mehr benötigten Speicherplatzes:
 +  borg compact ssh://u123456@u123456.your-storagebox.de:23/./backups/mctest
 +
  
 ==== Backup automatisieren ==== ==== Backup automatisieren ====
Zeile 95: Zeile 120:
  
   #!/usr/bin/env bash   #!/usr/bin/env bash
-  ## 
   ## Setzten von Umgebungsvariablen   ## Setzten von Umgebungsvariablen
-  ## +  ## Pfad zu Ihrem private Key, falls nicht der Standard SSH Key verwendet wird
-  ## falls nicht der Standard SSH Key verwendet wird können +
-  ## Sie hier den Pfad zu Ihrem private Key angeben+
   export BORG_RSH='ssh -i /home/me/.ssh/id_rsa'   export BORG_RSH='ssh -i /home/me/.ssh/id_rsa'
-  ## Damit das Passwort vom Repository nicht eingegeben werden muss +  ## Passwort in Umgebungsvariable setzen, sofern Repository damit geschützt. 
-  ## kann es in der Umgepungsvariable gesetzt werden +  ## Andernfalls würde es abgefragt. 
-  export BORG_PASSPHRASE="sehr_sicheres_passwort+  export BORG_PASSPHRASE="Repository_Password
-  ##+  ## This has to be set when the repository has been created by user and the script is called by cron 
 +  export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes 
 +  
   ## Setzten von Variablen   ## Setzten von Variablen
-  ## 
   LOG='/var/log/borg/backup_'$(date +%Y-%m-%d_%H%M)'.log'   LOG='/var/log/borg/backup_'$(date +%Y-%m-%d_%H%M)'.log'
   export BACKUP_USER='u123456'   export BACKUP_USER='u123456'
   export REPOSITORY_DIR='mctest'   export REPOSITORY_DIR='mctest'
-   +  ## Hier Struktur für den Hetzner-Server
-  ## Hinweis: Für die Verwendung mit einem Backup-Account muss +
-  ## 'your-storagebox.de' in 'your-backup.de' geändert werden. +
-  +
   export REPOSITORY="ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR}"   export REPOSITORY="ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR}"
      
-  ## 
   ## Ausgabe in Logdatei schreiben   ## Ausgabe in Logdatei schreiben
-  ## 
-   
   exec > >(tee -i ${LOG})   exec > >(tee -i ${LOG})
   exec 2>&1   exec 2>&1
Zeile 125: Zeile 142:
   echo "###### Backup gestartet: $(date) ######"   echo "###### Backup gestartet: $(date) ######"
      
-  ## +  ## An dieser Stelle können verschiedene Aufgaben vor der Übertragung der Dateien ausgeführt werden, 
-  ## An dieser Stelle können verschiedene Aufgaben vor der +  ## wie z.B.
-  ## Übertragung der Dateien ausgeführt werden, wie z.B. +
-  ##+
   ## - Liste der installierten Software erstellen   ## - Liste der installierten Software erstellen
   ## - Datenbank Dump erstellen   ## - Datenbank Dump erstellen
-  ## 
      
-  ## 
   ## Dateien ins Repository übertragen   ## Dateien ins Repository übertragen
-  ## Gesichert werden hier beispielsweise die Ordner root, etc, +  ## Gesichert werden hier beispielsweise die Ordner root, etc, var/www und home 
-  ## var/www und home +  ## Ausserdem finden Sie hier gleich noch eine Liste Excludes,die in kein Backup sollten und  
-  ## Ausserdem finden Sie hier gleich noch eine Liste Excludes, +  ## somit per default ausgeschlossen werden.
-  ## die in kein Backup sollten und somit per default ausgeschlossen +
-  ## werden. +
-  ##+
      
   echo "Übertrage Dateien ..."   echo "Übertrage Dateien ..."
Zeile 160: Zeile 170:
   echo "###### Backup beendet: $(date) ######"   echo "###### Backup beendet: $(date) ######"
  
-Ausführbar machen+=== Cronjob einrichten === 
 +Datei Ausführbar machen
   sudo chmod u+x /usr/local/bin/backup.sh   sudo chmod u+x /usr/local/bin/backup.sh
-Testen+ggf. Testen
   sudo /usr/local/bin/backup.sh   sudo /usr/local/bin/backup.sh
- 
 Einfügen in crontab Einfügen in crontab
   sudo nano /etc/crontab   sudo nano /etc/crontab
  
   0 0 * * *    root    /usr/local/bin/backup.sh   0 0 * * *    root    /usr/local/bin/backup.sh
-Hier Start täglich um 0:00 Uhr+Hier Start täglich um 0:00 Uhr.\\ 
 +**Voraussetzungen**:  
 +  * das ausführende System muss zu der angegebenen Zeit in Betrieb sein. Der Job wird nicht bei einem späteren Einschalten nachgeholt! 
 +  * Wenn das Script durch root ausgeführt werden soll, für die Sicherung von Systemdateien vermutlich erforderlich, muss auch root Zugriff auf den, ggf. entfernten, Backup-Rechner besitzen. Siehe [[open:it:backup#Schlüssel tauschen|Schlüssel tauschen]].
  
 +=== Anacronjob ===
 +Läuft ein System  nicht dauerhaft, kann dies über **anacron** geregelt werden. Das System prüft regelmäßig (z.B. beim Systemstart) ob Programme/Scripte, die in einem bestimmten Ordner abgelegt sind, ausgeführt wurden und holt dies nach, falls noch nicht geschehen. \\
 +Zur Verfügung stehen die Zyklen: 
 +  * täglich >> Ordner /etc/cron.daily
 +  * wöchentlich >> Ordner /etc/cron.weekly
 +  * monatlich >> Ordner /etc/cron.monthly
 +Die ausführbahren Scripte müssen in den entsprechenden Ordnern liegen.
  
 ===== Selbst programmiertes, einfaches Backup ===== ===== Selbst programmiertes, einfaches Backup =====
-Siehe auch: https://www.ionos.de/digitalguide/server/tools/backup-mit-tar-so-erstellen-sie-archive-unter-linux/+++++ Quellen
 +  * https://www.ionos.de/digitalguide/server/tools/backup-mit-tar-so-erstellen-sie-archive-unter-linux/ 
 +++++
  
-Das vorgestellte Konzept: Dateien und Datenbanken auf einem entfernten (remoteServer automatisch und regelmäßig auf diesem sichern. Automatisch und regelmäßig die Daten auf einen lokalen Rechner/Server kopieren.+Die vorgestellten Scripte sichern regelmäßig und automatisiert ausgewählte Dateien in gepackten Datein. \\ 
 +  * Sichern von MySQL-Datenbanken 
 +  * Sichern von Dateien und Verzeichnissen 
 +  * Komplexes aber einfaches Backup-System 
 +  * Daten eines entfernten Rechners (Remote-Systemlokal sichern
  
-==== Scripte Remote-System ====+==== Scripte ====
  
-=== Dateien sichern === +=== Datenbanken sichern === 
-  sudo nano /<PFAD>/backup.sh+Datenbanken eines MySQL-Servers sichern. \\ 
 +Legt bis zu 31 Sicherungen an, jeweils mit Tagesdatum - keine Angabe von Monat oder Jahr. \\ 
 +Bei demselben Datum wird überschrieben. \\ 
 + 
 +  sudo nano /<PFAD>/backup_sql.sh
  
   #!/bin/bash   #!/bin/bash
-  SOURCE="/etc/apache2/sites-available/ " +  BACKUP_DIR="/<PFAD>/dbase
-  BACKUP_DIR="/<PFAD>/daten"+  DAY=$(date +%d) 
 +  USER="<BENUTZER>" 
 +  PW="<PASSWORT>"
   mkdir -p ${BACKUP_DIR}   mkdir -p ${BACKUP_DIR}
-  cp -p -u -${SOURCE} ${BACKUP_DIR} +  DBASE="<DATENBANK>" 
-  cp -p -u <ONE-FILE> ${BACKUP_DIR}+  mysqldump -u${USER} -p${PW} ${DBASE} > ${BACKUP_DIR}/${DBASE}-${DAY}.sql
   exit   exit
  
-Ersetzen: SOURCE, <PFAD>, <ONE-FILE\\ +Ersetzen: <PFAD>, <BENUTZER>, <PASSWORT>, <DATENBANK> \\ 
-Leerzeichen am Ende der SOURCE! \\ +Hier Beispielhaft für eine Datenbank. Die beiden Zeilen "DBASE= ...." und "mysqldump ...." einfach vervielfältigen um weitere Datenbanken zu sichern. Bei <BENUTZERund <PASSWORD> handelt es sich um einen User mit Rechten für die MySQL-Datenbank. \\
-Verzeichnis wird angelegtsofern nicht existent. \\ +
-So können einzelne Dateien <ONE-FILEoder ganze Verzeichnisse SOURCE gesichert werden. \\+
  
-**Parameter für cp (copy)** \\ +(Zurück)Importieren über Konsole: 
--p oder - -preserve      =Attribute der Originaldatei werden beim Kopieren vererbt \\ +  mysql -u <BENUTZER> -p <DATENBANK> < <SQL-FILE>.sql 
--preserve=timestamp    => Zeitstempel der Originaldatei wird beim Kopieren vererbt \\ +Die Datenbank muss im MySQL-Server bereits angelegt sein und der bennante Benutzer Zugriffsrechte darauf besitzen. \\ 
--r oder -R oder - -recurcive   => Verzeichnisse inklUnterverzeichnisse \\ +Ersetzen: <BENUTZER>, <DATENBANK>, <SQL-FILE> \\ 
--u oder - -update           =Kopiert die Datei nurwenn die Zieldatei älter als das Original ist \\ +Die Zeichen "größer-als" (>) und "kleiner als" (<) entscheiden über die SchreibrichtungZu lesen wie ein Pfeil - hier also von der Datei in die Datenbank.
--v  oder - -verbose         =Gibt nach dem Kopiervorgang eine Meldung aus \\ +
-Werden (nureinzelne Dateien kopiert, müssen die Zielverzeichnisse bereits existieren! \\ +
- +
-Siehe auch [[https://wiki.ubuntuusers.de/cp/|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 Zugriffsprobleme geben (Prüfen, o User Leserechte auf die gesicherten Dateien hat)Durch Packen der Daten ins Home-Verzeichnis des <USERS> kann man das Problem umgehen, da dann Zugriff auf die gepackten Daten besteht.+
  
 === Dateien packen und sichern === === Dateien packen und sichern ===
-  sudo nano /<PFAD>/backup_gepackt.sh+  sudo nano /<PFAD>/backup.sh
  
   #!/bin/bash   #!/bin/bash
Zeile 219: Zeile 243:
 Ersetzen: SOURCE, <PFAD> \\ Ersetzen: SOURCE, <PFAD> \\
 Leerzeichen am Ende der SOURCE! \\ Leerzeichen am Ende der SOURCE! \\
 +=== Inhalt gepackter Dateien anzeigen ===
 +  tar -tvf backup_gepackt.tar.gz
 +
 +Inhaltsverzeichnis in Datei schreiben
 +  tar -tvf backup_gepackt.tar.gz > content.txt
 +
 +=== Dateien entpacken ===
 Entpacken (in aktuelles Verzeichnis): Entpacken (in aktuelles Verzeichnis):
   tar -xf backup_gepackt.tar.gz   tar -xf backup_gepackt.tar.gz
Zeile 230: Zeile 261:
 -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. \\ -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 sichern === +=== Komplexes System === 
-  sudo nano /<PFAD>/backup_dbase.sh+Das System sichert regelmäßig((Zyklus definiert durch /etc/crontab)) bestimmte Datenbereiche und jeder Zeitpunkt, an dem ein Backup durchgeführt wurde, kann wiederhersgestellt werden, solange die Backup-Dateien nicht gelöscht wurden. \\ 
 +<WRAP important> 
 +Der Speicherbedarf wächst durch dieses System kontinuierlich((in dem Rahmen, in dem es Änderungen am Datenbestand gab)). \\ 
 +Ältere Dateien müssen daher regelmäßig manuell gelöcht oder verschoben werden. \\ 
 +In keinem Fall sollte ein Backup auf der System-Partition gesichert werden, da dieses, sollte der Speicherplatz restlos verbraucht sein, ggf. unbrauchbar oder unausführbar werden könnte. \\ 
 +Eine eigene Partition oder ein eingebundenes NAS mit beschränktem bzw. reguliertem Speicher bietet sich an. \\ 
 +Aber auch das ist zu kontrollieren, da das Backup nicht mehr ausgeführt wird, wenn der Speicherplatz verbraucht ist. 
 +</WRAP> 
 +  - Das Script verbindet das System mit einem Remote-NAS (mount) und trennt die Verbindung am Ende wieder. 
 +  - Es werden nur die Daten gesichert, die seit dem letzten Backup geändert wurden - ohne dass der letzte Stand, das letzte Backup, überschrieben wird. 
 +  - Nach einer festgelegten Anzahl Backups (hier 30) werden die Backups in ein Unterverzeichnis **rotate/<ZEITSTEMPEL>** verschoben und das System beginnt von vorne -> zunächst ein komplett-Backup, dann wieder 30x nur geänderte Daten. 
 +  - Es können definierte Unterverzeichnisse ausgeschlossen werden (exclude) 
 + 
 +Hier Beispielhaft die Datensicherung des Verzeichnisses /home \\ 
 +Ausgenommen wird das darin enthaltene Verzeichnis /home/menot \\
  
-  #!/bin/bash +  sudo nano /<PFAD>/backup.sh 
-  BACKUP_DIR="/<PFAD>/dbase+ 
-  DAY=$(date +%d) +  SOURCE="/home " 
-  USER="<BENUTZER>" +  EXCLUDE="/home/menot/*" 
-  PW="<PASSWORT>"+  mountPoint="/mnt/backup" 
 +  BACKUP_DIR="${mountPoint}/homes" 
 +   
 +  ROTATE_DIR="${BACKUP_DIR}/rotate
 +  TIMESTAMP="timestamp.dat" 
 +   
 +  mount "${mountPoint}" 
 +  if ! [ `mount |grep "${mountPoint}" | wc -l` -eq 1 ]; then 
 +    exit 
 +  fi 
 +   
 +  DATE=$(date +%Y-%m-%d-%H%M%S
 +   
 +  cd / 
 +  #Verzeichnis anlegen, falls nicht existent
   mkdir -p ${BACKUP_DIR}   mkdir -p ${BACKUP_DIR}
-  DBASE="<DATENBANK>" +   
-  mysqldump -u${USER} -p${PW} ${DBASE${BACKUP_DIR}/${DBASE}-${DAY}.sql+  set -- ${BACKUP_DIR}/backup-??.tar.gz 
 +  lastname=${!#} 
 +  backupnr=${lastname##*backup-
 +  backupnr=${backupnr%%.*} 
 +  backupnr=${backupnr//\?/0} 
 +  backupnr=$[10#${backupnr}] 
 +   
 +  if [ "$[backupnr++]" -ge 30 ]; then 
 +  mkdir -p ${ROTATE_DIR}/${DATE} 
 +  mv ${BACKUP_DIR}/b* ${ROTATE_DIR}/${DATE} 
 +  mv ${BACKUP_DIR}/t* ${ROTATE_DIR}/${DATE} 
 +  backupnr=1 
 +  fi 
 +   
 +  backupnr=0${backupnr} 
 +  backupnr=${backupnr: -2} 
 +  filename=backup-${backupnr}.tar.gz 
 +  tar -cpzf ${BACKUP_DIR}/${filename} -g ${BACKUP_DIR}/${TIMESTAMP} --exclude="${EXCLUDE}" ${SOURCE} 
 +  umount "${mountPoint}"
   exit   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 
-Die Datenbank muss bereits existieren und der bennante Benutzer Zugriffsrechte darauf besitzen. \\ 
-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 ==== ==== Backup ausführen ====
 Scripte ausführbar machen (hier alle .sh-Dateien im angegebenen Verzeichnis): Scripte ausführbar machen (hier alle .sh-Dateien im angegebenen Verzeichnis):
-  sudo chmod u+x /<PFAD>/*.sh +  sudo chmod +x /<PFAD>/*.sh
-   +
-  sudo chmod g+x /<PFAD>/*.sh +
-Die Ausführung wird hier eingeschränkt auf Datei-Eigentümer (u+x) und Gruppe (g+x) \\+
  
 **Script manuell ausführen:** **Script manuell ausführen:**
   sudo bash /<PFAD>/backup.sh   sudo bash /<PFAD>/backup.sh
- 
  
 **Automatisiert als root ausführen über Cronjob** **Automatisiert als root ausführen über Cronjob**
Zeile 271: Zeile 331:
  
   # /etc/crontab                #system-wide crontab   # /etc/crontab                #system-wide crontab
-  0 4 * * * root /PFAD/backup_dbase.sh +  0 4 * * * root /PFAD/backup_sql.sh 
-  0 3 * * root /PFAD/backup.sh +  0 3 * * root /PFAD/backup.sh
-  0 3 2 * * root /PFAD/backup_gepackt.sh+
  
 Lesart der (einschränkenden) Zahlen: \\ Lesart der (einschränkenden) Zahlen: \\
Zeile 280: Zeile 339:
  
 Ausführung der o.a. Angaben:  Ausführung der o.a. Angaben: 
-  * jeden Tag um 4:00 Uhr -> Datenbank(en) +  * jeden Tag um 4:00 Uhr -> SQL-Datenbank(en)
-  * jeden 1. Tag im Monat um 3:00 Uhr -> Dateien+
   * jeden 2. Tag im Monat um 3:00 Uhr -> Dateien packen   * jeden 2. Tag im Monat um 3:00 Uhr -> Dateien packen
  
-==== Daten auf lokalen PC kopieren ==== +Voraussetzung: der ausführende PC muss zu der angegebenen Zeit in Betrieb sein. Der Job wird nicht bei einem späteren Einschalten nachgeholt! \\ 
-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. Siehe [[open:it:ssh|SSH-Verbindungen]].+Andernfalls kann das über einen [[#Anacronjob|Anacronjob]] geregelt werden.
  
-  sudo nano /<PFAD>/backup_externer_server.sh+==== Daten von Remote-System holen ==== 
 +Von einem lokalen System können Daten eines entfernten Systems (z.B. Backups) austomatisiert abgeholt/kopiert werden. Der Login auf den Remote-System muss mit einer SSH-Zertifikatsdatei ohne Passwort für den im Cronjob stehenden User realisiert sein. Siehe [[open:it:ssh|SSH-Verbindungen]]. 
 + 
 +  sudo nano /<PFAD>/get_remote_files.sh
  
   #!/bin/bash   #!/bin/bash
Zeile 294: Zeile 355:
  
 Ersetzen: <PFADEXTERN>, <PFADLOKAL>, <USERNAME>, <REMOTESERVER> (IP-Adresse) \\ Ersetzen: <PFADEXTERN>, <PFADLOKAL>, <USERNAME>, <REMOTESERVER> (IP-Adresse) \\
-Sind lokaler User und Remoteuser bei der manuellen Ausführung identisch, kann "<USERNAME>@" entfallen. \\ 
 scp = Kopieren über gesicherte ssh-Verbindung \\ scp = Kopieren über gesicherte ssh-Verbindung \\
 -r = Kopieren inkl. aller Unterverzeichnisse \\ -r = Kopieren inkl. aller Unterverzeichnisse \\
 +Achtung: Es kann nur kopiert werden, wenn auch Lese-Zugriff vom einloggenden <USERNAME> auf die Dateien im Remote-System besteht - z.B. bei Systemdateien. Ist dies nicht möglich, könnte am Remote-System ein regelmäßiges Backup die betroffenen Dateien in einen Bereich sichern, auf den der benannte User Zugriff hat. \\
  
-Die (angepasste) Zeile "scp -r ...." kann zur manuellen Ausführung auch direkt als Befehl auf der Konsole eingegeben werden +Die (angepasste) Zeile "scp -r ...." kann zur manuellen Ausführung auch direkt als Befehl auf der Konsole eingegeben werden. \\ 
-=== Automatisiert über Cronjob === +Sind lokaler User und Remoteuser identisch, kann "<USERNAME>@" bei der manuellen Ausführung entfallen\\
-Voraussetzung: der ausführende PC muss zu der Zeit in Betrieb seinDer Job wird nicht bei einem späteren Einschalten nachgeholt! \\ +
-Läuft der PC nicht dauerhaft, kann dies über **anacron** geregelt werden, siehe [[https://wiki.ubuntuusers.de/Cron/|Ubuntuusers.de -Cron]]. Anacron führt die Jobs regelmäßig aus (täglich, wöchentlich oder monatlich), auch wenn der PC nicht immer an ist. Die ausführbaren Dateien müssen dann in den entsprechenden Ordnern liegen (/etc/cron.daily, /etc/cron.weekly, ...). Anacron holt Jobs beim starten des Systems nach, wenn ihre Ausführung noch offen ist. +
- +
-  sudo nano /etc/crontab +
  
-  /etc/crontab: system-wide crontab +Auch hier ist die Automation über einen Cronjob möglich, siehe [[#Backup ausführen|Backup ausführen]]\\
-  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 vom einloggenden <USERNAME> auf die externen Dateien besteht. Sollen z.B. die letsencrypt-Zertifikate kopiert werden, dann müssen hierfür am externen System Zugriffsrechte vorliegen. Soll Z.B. das Backup auf dem entfernten System (als root über cronjob) ins Home-Verzeichnis schreiben, aber trotzdem keine Zugriffsrechte darauf bestehen (Prüfen) Dateien vorher packen, [[#Daten packen|siehe oben]].\\ 
  
-~~DISCUSSION~~ 
open/it/backup.1721629462.txt.gz · Zuletzt geändert: von Kai