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=''| Variable | Bedeutung |
|---|---|
| sicherungsname | Basisname der Backup-Dateien |
| pfad_root | Arbeitsverzeichnis für die Sicherungen |
| pfad_web | Verzeichnis der Website-Dateien |
3. Datenbanksicherung erstellen
Die MySQL-Datenbank wird mithilfe von mysqldump exportiert.
mysqldump -u ${dbuser} -p${dbpass} ${dbname} > ${sicherungsname}_${datum}.sqlDabei 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 * .htaccessDas 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 *.sqlDadurch 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 curlMö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.

