rsnapshot für Server

rsnapshot erstellt uns periodisch Schnappschüsse von unserem Server. Installiere das Programm mit:

# apt install rsnapshot

und navigiere zur Konfigurationsdatei unter:

# nano /etc/rsnapshot.conf

Hinweis: alle Einzüge müssen mit der Taste TAB gemacht werden und keinesfalls mit der Space-Taste (Leertaste)

01. Snapshot root directory

hier geben wir das Zielverzeichnis aller snapshots an.
# All snapshots will be stored under this root directory.
#
snapshot_root /BACKUP/snapshot/

02. Backup Levels / Intervals

hier geben wir einmalig den Namen unseres snapshots und den Intervall an, wie viele snapshots aufbewahrt werden
retain snapshot 24

03. include & exclude

include und exclude gibt an, welche Verzeichnisse zusätzlich eingeschlossen oder ausgeschlossen werden. Bei meinen snapshots schliesse ich jeweils den Papierkorb / Trash aus:
exclude Recycled/
exclude Trash/
exclude lost+found/

04. Backup Points / Scripts

# LOCALHOST
backup /etc/ localhost/
backup /var/www/html/ localhost/

05. Script testen

teste das Script mit:

# rsnapshot configtest
Syntax OK
06. Teste den Snapshot mit der Eingabe von:
rsnapshot -t snapshot
07. snapshot mittels crontab ausführen

In diesem Beispiel schreiben wir nun ein Backups-Script und weisen den Crontab an, das Script alle 3 Stunden auszuführen.
Wir erstellen ein Backup-Script mit:

nano backup.sh

# !/bin/bash
rsnapshot snapshot

mache das Script ausführbar:

# chmod +x backup.sh

nun weisen wir dem Crontab zu, das Backupscript aller 3 Stunden auszuführen:

# crontab -e

# snapshot erstellen alle 3 Stunden
0 */3 * * * bash /root/backup.sh
#

rsnapshot erstellt nun alle 3 Stunden einen Snapshot und behält unter Punkt 2 insgesamt 24 Snapshots davon. Danach werden die ältesten Snapshots überschrieben.

Hinweis: das Erstellen des ersten Snapshot kann lange dauern, da ja noch keine ältere Version vorliegt. Die nachfolgenden Snapshots dauern dann in der Regeln ein paar Sekunden. Falls wirklich viele Daten beim ersten Snapshot gespeichert werden müssen, kann der snapshot.0 auch manuell angestossen werden. Dazu startest du einfach das Backup-Script manuell.

crontab mit bash-Script

crontab kann per Bash-Script ausgeführt werden. In diesem Beispiel erstellen wir uns einen crontab, der jeweils um 23:30 Uhr auf unserem Rocket.Chat Server ein Backup erstellt.

# nano /etc/crontab
/etc/crontab zeigt beim ersten Aufruf die Tutorialseite an. Tippe hier die systemweiten crontab ein.

# /etc/crontab: system-wide crontab

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# Starte Backup um 23:30 Uhr
30 23 * * * root bash /root/backup_chat.sh
# lösche Backups > 3 Tage. Überprüfe jeweils um 23:45 Uhr.
45 23 * * * root find /var/snap/rocketchat-server/common/backup/*.* -mtime +3 -exec rm {} \;
#

dieser crontab ruft somit um 23:30 Uhr das backup-Script backup_chat.sh auf. Das Script liegt hier unter /root/backup_chat.sh
#!/bin/bash
service snap.rocketchat-server.rocketchat-server stop
snap run rocketchat-server.backupdb
service snap.rocketchat-server.rocketchat-server start

das Script kann im Voraus noch geprüft werden:

# bash /root/backup_chat.sh
[*] Creating backup file...
[+] A backup of your data can be found at /var/snap/rocketchat-server/common/backup/rocketchat_backup_20231113.0944.tar.gz

crontab in Debian

crontab erstellen

Mittels crontab lassen sich auf deinem Server Prozesse automatisieren. Angenommen, ich möchte jeden Tag um 00:10 Uhr die gesamte Datenbank sichern.

Starte crontab:

$ crontab -e

Im Editorfenster geben wir nun den gewünschten crontab ein:
# sichere die Datenbank alle Tage um 00:10. Überschreibe das aktuelle File jeweils:
10 0 * * * /usr/bin/mysqldump --all-databases --single-transaction --quick --lock-tables=false -r /opt/dbfull.sql

crontab sorgt dafür, dass die jeweiligen Files zum angegebenen Zeitpunkt auf dem Server liegen.

root darf alles, wirklich alles!

Dabei spielt es eine wesentliche Rolle, ob wir crontab als normalen Benutzer oder als root ausführen. root darf alles!
Editiere in diesem Fall die /etc/crontab – hier kannst du den Benutzer, welcher den Befehl ausführen soll auch gleich mitgeben. Doch Vorsicht! root kann wirklich alles. Du kannst hier auf Kommando auch dein gesamtes System zerstören!

# crontab -e

Zeitstempel

Geben wir der Zielatei keinen Zeitstempel mit, überschreibt crontab das jeweilige File. Einen Zeitstempel geben wir mittels date an:

example_$(date +"\%Y-\%m-\%d_\%H-\%M").sql

wird z. B. zu:
example_2004-03-05_09-58.sql
In diesem Beispiel entspricht dies dem 05. März 2004 um 09:58 Uhr. (YYYY/mm/DD/HH/MM)

Zeit bestimmen (Beispiele)

# Zeitbeispiele
.---------------- Minuten (0 - 59)
| .------------- Stunden (0 - 23)
| | .---------- Tag im Monat (1 - 31)
| | | .------- Monat (1 - 12) oder jan,feb,mar,apr ...
| | | | .---- Tag der Woche (0 - 6) (Sonntag=0 oder 7) oder mon,tue,wed,thu,fri,sat
| | | | |
* * * * *
# sendet jeden Tag um 12:00 Uhr einen ping an example.com
0 12 * * * ping -c1 example.com

# sendet jeden Montag, Mittwoch und Freitag um 04:05 Uhr einen ping an example.com
5 4 * * mon,wed,fri ping -c1 example.com

# sendet alle 20 Minuten einen ping an example.com
*/20 * * * * ping -c1 example.com

Damit lässt sich z. B. eine einfache Backuplösung realisieren.

Archiv erstellen

Mittels tar oder zip lassen sich Archive unter einem Linux-Server erstellen. Angenommen du möchtest den Theme-Ordner deiner WordPress Installation sichern, geht dies mit tar, gz, gzip, bz2, bzip2 oder eben zip. gzip und bzip2 sind sich sehr ähnlich, verwenden aber einen anderen Algorithmus. Ein reines tar-Archiv ist unkomprimiert. Der Theme-Ordner von WordPress findet sich in der Regel unter /var/www/html/wp-content/themes

mittels zip

Der Zip-Befehl kann rekursiv (-r) ausgeführ werden. Dabei werden alle Unterordner mit einbezogen. Vereinfacht lautet der Befehl:
zip -r zieldatei.zip /pfad/zum/Ordner

$ zip -r themes.zip /var/www/html/wp-content/themes/

mittels tar

Anders verhält sich hier tar und erstellt eine unkomprimierte Datei. Die ausgegebene Datei themes.tar kann jetzt noch mit gz komprimiert werden. Auch hier gilt allgemein:
tar cfv zieldatei.zip /pfad/zum/Ordner

$ tar cfv themes.tar /var/www/html/wp-content/themes/
$ gzip themes.tar

so lässt sich schnell und einfach ein Archiv erstellen. Als Ausgabe bekommst Du die Datei themes.tar.gz

Die Archiv-Datei kann mittels proftpd heruntergeladen werden. Alternativ kannst Du sie (falls ein Webserver wie apache2 läuft) nach /var/www/html verschieben und per wget oder im Browser herunterladen:

$ wget example.com/themes.tar.gz

Vergiss am Ende nicht, die Archiv-Datei auf dem Server zu löschen.

Entpackt wird die tar.gz mittels:

tar -xvzf DATEINAME.tar.gz