Automatisches Website- und MySQL-Backup mit Bash

WordPress-Backup per Bash-Skript automatisieren

Mit diesem Bash-Skript lassen sich die wichtigsten Bestandteile einer Website automatisiert sichern. Dabei werden sowohl die MySQL-Datenbank als auch die Webdateien archiviert und anschließend auf einen externen Backup-Server übertragen. Das Skript eignet sich besonders für die regelmäßige Sicherung von WordPress-Websites oder anderen webbasierten Anwendungen.

#!/bin/bash
# Backup BASH Datei
# Delarosa
# 12.04.2024
####### Datum und Pfade #######
datum=$(date +%Y-%m-%d-%H-%M)
sicherungsname=''
pfad_root=''
pfad_web=''
####### Datenbankdaten ########
dbname=''
dbuser=''
dbpass=''
####### Backup-Server #######
server=''
server_user=''
server_pass=''
#####################################
# Start des Backups mit allen Daten #
#####################################
####### Start-Pfad festlegen !!! #######
cd ${pfad_root}
####### Datenbank sichern #####
mysqldump -u ${dbuser} -p${dbpass} ${dbname} > ${sicherungsname}_${datum}.sql
####### Daten sichern #######
cd ${pfad_web}
zip -r ${sicherungsname}_${datum}.zip * .htaccess
mv ${sicherungsname}_${datum}.zip ${pfad_root}
cd ${pfad_root}
####### Und alles hochschieben ######
curl -T ${sicherungsname}_${datum}.sql -u${server_user}:${server_pass} ${server}
curl -T ${sicherungsname}_${datum}.zip -u${server_user}:${server_pass} ${server}
####### Alter Dateien entfernen #######
rm *.zip
rm *.sql
echo "#########################################"
echo "#                                       #"
echo "#    Alles auf Ext. Server gesichert    #"
echo "#    Bitte überprüfen ...               #"
echo "#                                       #"
echo "#########################################"

Funktionsweise des Skripts

Das Skript führt mehrere Sicherungsschritte automatisiert hintereinander aus:

1. Erzeugung eines Zeitstempels

Zu Beginn wird ein aktueller Zeitstempel erstellt:

datum=$(date +%Y-%m-%d-%H-%M)

Dadurch erhält jede Sicherungsdatei einen eindeutigen Namen und ältere Backups werden nicht überschrieben.

2. Konfiguration der Pfade

Die Variablen definieren die Speicherorte der Website-Dateien und den Namen der Sicherung:

sicherungsname=''
pfad_root=''
pfad_web=''
VariableBedeutung
sicherungsnameBasisname der Backup-Dateien
pfad_rootArbeitsverzeichnis für die Sicherungen
pfad_webVerzeichnis der Website-Dateien

3. Datenbanksicherung erstellen

Die MySQL-Datenbank wird mithilfe von mysqldump exportiert.

mysqldump -u ${dbuser} -p${dbpass} ${dbname} > ${sicherungsname}_${datum}.sql

Dabei entsteht eine SQL-Datei, die alle Tabellen, Inhalte und Strukturen der Datenbank enthält.

4. Website-Dateien archivieren

Im nächsten Schritt werden die Webdateien inklusive der .htaccess-Datei in ein ZIP-Archiv gepackt.

zip -r ${sicherungsname}_${datum}.zip * .htaccess

Das Archiv wird danach in das Backup-Verzeichnis verschoben.

5. Upload auf einen externen Backup-Server

Mithilfe von curl werden sowohl die SQL-Datei als auch das ZIP-Archiv auf einen externen Server übertragen.

curl -T ${sicherungsname}_${datum}.sql -u${server_user}:${server_pass} ${server}
curl -T ${sicherungsname}_${datum}.zip -u${server_user}:${server_pass} ${server}

Die Authentifizierung erfolgt über Benutzername und Passwort.

6. Lokale Dateien löschen

Nach erfolgreichem Upload werden die lokalen Sicherungsdateien entfernt:

rm *.zip
rm *.sql

Dadurch bleibt der Speicherplatz auf dem Server frei und es sammeln sich keine alten Backups an.

7. Abschlussmeldung

Zum Schluss gibt das Skript eine Statusmeldung aus:

Alles auf Ext. Server gesichert
Bitte überprüfen ...

So kann direkt erkannt werden, dass der Sicherungsvorgang abgeschlossen wurde.

Voraussetzungen

Für die Nutzung des Skripts sollten folgende Programme installiert sein:

  • Bash
  • MySQL Client (mysqldump)
  • ZIP
  • cURL

Unter Debian/Ubuntu können diese Pakete beispielsweise mit folgendem Befehl installiert werden:

sudo apt install mysql-client zip curl

Mögliche Erweiterungen

Für den produktiven Einsatz bieten sich einige Verbesserungen an:

  • Protokollierung aller Sicherungsvorgänge in einer Log-Datei
  • Prüfung, ob der Upload erfolgreich war
  • Automatische Benachrichtigung per E-Mail bei Fehlern
  • Verschlüsselung der Backup-Dateien
  • Aufbewahrungsrichtlinien für ältere Sicherungen
  • Ausführung per Cronjob für tägliche oder wöchentliche Backups

Fazit

Dieses Bash-Skript bietet eine einfache und effektive Möglichkeit, Datenbanken und Webdateien automatisiert zu sichern. Durch die Kombination aus Datenbankexport, Dateikomprimierung und externem Upload entsteht eine vollständige Backup-Lösung, die sich besonders für WordPress-Websites und kleinere Webprojekte eignet.

Ähnliche Beiträge