Tech-Thiel

Technik die nicht nur mich begeistert

Backup meiner Webseiten

Sicherungen meiner Webseiten. Wichtig. Gutes Thema. Steht schon lange auf meiner ToDo-Liste.

Die Anforderung:

  • inkrementelle Sicherung der Dateien – also nur Änderungen werden gespeichert und so Speicherplatz eingespart.
  • Datenbankbackup muss separat sein
  • Ich brauche eine grafische Oberfläche um die Backups zu kontrollieren und im Bedarfsfall gezielt wieder herstellen zu können.

Als Arbeitstier habe ich mir eine VM auf meinem Heimserver eingerichtet die sich per SSH mit den Hosting-Servern und per SMB mit meiner Hetzner Storage Box verbindet Auf der VM ist die Software Vorta installiert, die für die eigentlich Datensicherung zuständig ist.

Datenbanksicherung

Bei den meisten Projekten, ist die Datenbank tatsächlich das wichtigste, weil z. B. WordPress beinahe alle Einstellungen und Informationen dort speichert.

Um eine Sicherung der Datenbank zu erzeugen habe ich ein kleines Skript auf dem Server gelegt, das folgenden Inhalt hat:

#!/bin/bash

# --- KONFIGURATION ---
DB_HOST="localhost" 
DB_USER="benutzername"
DB_PASS="passwort"
DB_NAME="datenbankname"
BACKUP_DIR="zieldersicherung"
DATE=$(date +%Y-%m-%d_%H%M%S)
FILE_NAME="$BACKUP_DIR/backup_$DB_NAME_$DATE.sql.gz"

# --- BACKUP ERSTELLEN ---
# Wir nutzen gzip direkt, um Speicherplatz zu sparen
mysqldump -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" | gzip > "$FILE_NAME"


# --- BEREINIGUNG (7 Backups behalten) ---
# 1. Sicherstellen, dass wir im richtigen Verzeichnis sind
cd "$BACKUP_DIR" || { echo "Verzeichnis nicht gefunden"; exit 1; }

# 2. Zähle die Dateien, die dem Muster entsprechen
FILE_COUNT=$(ls -1 backup_*.sql.gz 2>/dev/null | wc -l)

if [ "$FILE_COUNT" -gt 7 ]; then
    echo "Gefundene Backups: $FILE_COUNT. Lösche alte Dateien..."
    
    # ls -t sortiert nach Zeit (neueste oben)
    # tail -n +8 nimmt alles AB der 8. Datei (behält also die Top 7)
    # xargs löscht diese dann
    ls -t backup_*.sql.gz | tail -n +8 | xargs -r rm --
    
    echo "Bereinigung durchgeführt."
else
    echo "Nur $FILE_COUNT Backups vorhanden. Nichts zu löschen."
fi

Wer etwas Code lesen kann, erkennt das System. Oben finden sich die Parameter für die Datenbank und der Dateiname für die Backup-Datei wird mit einem Datum versehen. Dann erfolgt die eigentliche Sicherung. Am Ende wird dann geprüft ob mehr als 7 Backups vorliegen. Wenn ja, werden die ältesten gelöscht. Simpel, aber effizient.

Dieses Skript hab ich dann unter sql_dump.sh auf dem Server gespeichert und mit chmod +x sql_dump.sh ausführbar gemacht.

Anschließend erstellte ich im Backend des Hostings einen Cronjob der dieses Skript ausführt.

/home/www/etc/sql_dump.sh >/dev/null 2>&1

Über die Häufigkeit des Exports muss ich mir im Detail Gedanken machen. Auf der Seite www.alexanderthiel.de passiert ja so gut wie nichts. Hier brauch ich ganz sicher nicht täglich sichern. alphathiel.de dagegen bekommt regelmäßig neue Inhalte und erfasst mit einem Plugin die Zugriffsstatistiken. Das wäre schon schade, wenn hier eine Lücken entstehen.

Soweit so gut. Die Datenbanken sind schon mal auf dem Webserver gesichert.

Tipps:

  1. Um zu prüfen, ob das Skript funktioniert, rufe ich es einmal über die Konsole auf (./sql_dump.sh) und lade mir die Datei herunter und importiere die das dann in eine andere Datenbank. Jetzt mache ich einen groben Vergleich über den PHP-MyAdmin ob die Daten identisch sind (Tabellengröße / Stichproben etc pp).
  2. Ich für das Skript weitere mal aus, um zu prüfen ob wirklich nur 7 Dateien erzeugt werden.
  3. Auf den Instanzen wo mehrere Projekt bestehen, muss der Dateiname im Skript natürlich eindeutig gewählt werden. Ich nehme dann immer die Domain mit rein. So ist klar, was in der Datenbank steckt.

Vorta – Die Daten sichern

Die Bedienung ist eigentlich recht einfach. Wenn Vorta geöffnet wurde, befindet man sich im Profil „Default“. Klick auf das + um ein neues Profil anzulegen.

Dem Kind einen Namen geben. Wer mehr als ein Backup durchführen möchte, überlegt sich am besten gleich einen guten Namen um später nicht durcheinander zukommen. Ich z.B. möchte für jedes WebProjekt eine Sicherung der Datenbank und eine Sicherung der Files durchführen. Also benenne ich ein Profil alphathiel-datenbank und die nächste alphathiel-files – und so weiter.

Jetzt ist man im neuen Profil und klickt sich hier eigentlich einfach nur durch die verschiedenen Reiter.

Repository

Das Ziel der Sicherung, wenn man so will. Auf dem Reiter Repository in der Zeile Repository da DropDown Menü öffnen und „Neues Repository“ auswählen.

Hinten auf den Ordner klicken und dann dann befinden man sich im Dateiauswahl Dialog des Betriebssystems. Hier „einfach“ zum Ziel durchklicken. In meinem Fall also der Mountpunkt /media/hetzner – weil hier ja die Hetzner Storage Box eingehängt ist. Hier erstelle ich noch den Ordner alphathiel-datenbank und wähle den diesen Ordner als Ziel aus.

Auf dem Reiter Erweitert hat man die Wahl ob man die Sicherung verschlüsselt ablegen möchte. Ich entscheide mich dagegen. Es handelt sich ja um öffentliche Webseiten. Die Daten sind sowieso auffindbar und es gibt keinen Grund für diesen zusätzlichen Schutz. Wählt man eine Verschlüsselung, muss man definit ein Passwort vergeben. Wenn nicht, ist dieses Optional.

Sollte Ihr schützenswerte Daten sichern, z. B. die Daten eurer Kunden, Firmen interna etc pp. dann unbedingt Verschlüsseln. Ansonsten sehe ich im Verschlüsseln eher eine weitere Fehlerquelle als einen Vorteil. Muss aber natürlich jeder für sich entscheiden.

Weiter lässt sich noch der Kompressionslevel auswählen. Die Datenbanksicherungen sind bereits komprimiert, das was bei einer Webseite am meisten Speicherplatz frist sind Bilder und ähnliches. Auch diese sind bereits komprimiert. Auch diese zusätzliche Aufgabe für Vorta spare ich mir an dieser Stelle.

Quellen

Hier auf Ordner hinzufügen klicken und dann das gewünscht Ziel wählen. Die Software beginnt den Quell-Ordner zu scannen und zeigt die Größe an. Das kann man mit beliebig vielen Ordner wiederholen.

Man sieht, theoretisch könnte man alle Webseiten mit einem Profil in ein Ziel sichern. Aber ich persönlich mag es lieber fein säuberlich getrennt. So behalte ich einen Überblick und kann z.B. auch abschätzen ob die Sicherungen überhaupt funktionieren.

Zeitplan

Hier wählt man aus, wann die Sicherung durchgeführt wird. Mir persönlich fehlt hier die Option der wöchentlichen oder monatlichen Sicherung, aber das kann man natürlich über den Punkt 2 und der Anzahl an Stunden lösen.

Nach meinem Verständnis kann Vorta immer nur einen Job am Stück ausführen. Darum achte ich darauf das die Sicherung in 30 Minuten Abstand stattfinden. Mit Klick auf Anwenden wird die Einstellung übernommen und die Sicherung ist geplant.

Archive

Unter Archive sieht man dann alle Sicherungen die angelegt worden sind und kann diese von hier aus wiederherstellen.

Dazu wählt man das jeweilige Archiv aus klickt unten auf „Ausgewähltes Archiv“ und kann dann entweder das Archiv mounten, also als Laufwerk einhängen. Das ist Sinnvoll wenn man eine gezielte Datei aus der Sicherung holen will.

Oder man extrahiert das ganze Archive um es anschließend wieder ins gewünschte Ziel zu verschieben. Ganz einfach und simpel. So wie es sein soll.


Erstellt / letzte Bearbeitung:

/

Tech Thiel