Shopware Backups

Backups sind ein Thema mit denen sich alle Shopbetreiber auseinander setzen sollten. Häufig ist es allerdings der Fall, dass man sich erst damit beschäftigt, wenn konkrete Probleme vorliegen – und dann hätte man sich lieber schon vorher Backups angeschaut. Dieser Artikel soll für das Thema sensibilisieren und helfen zu verstehen, warum Backups so wichtig sind. Außerdem betrachten wir, welche Wege es gibt um Backups für Shopware 5 selber anzulegen.

Warum selber Backups anlegen?

Die Frage ist berechtigt, denn als Betreiber eines Shops geht man davon aus, dass der Hoster oder Provider sich um Backups kümmert, die Arbeit also vermeintlich abgenommen wird. Das heißt allerdings auch, man verlässt sich gänzlich auf den Anbieter -> Ein ’single point of failure‘ entsteht.

Man stelle sich ein Szenario vor, in denen ein Befehl ausgeführt wird, wodurch ein überflüssiger Teil Daten gelöscht werden soll. Versehentlich wird aber mehr (oder gar alles) gelöscht und der Shop funktioniert nicht mehr richtig. Oder aber der Hoster wird einer Hacker Attacke ausgesetzt. Jetzt meldet man sich beim Hoster und möchte auf sein Backup zugreifen, stellt aber fest, dass man nicht der einzige ist und warten muss. Das Kostet Zeit und Geld.

Letzten Endes vermisst man Backups immer am meisten, wenn man sie gerade dringend benötigt. Backups müssen gepflegt und kontrolliert werden – und vor allem: Sich auf nur eine Sicherung zu verlassen ist ein Fehler! Als grobe Richtlinie kann man sagen, es sollte drei Kopien geben. Das Original, ein Backup und ein zusätzliches abgeschirmtes Backup. Sich beispielsweise nur auf eine Kopie auf einer USB-Festplatte zu verlassen, ist auch nicht unbedingt empfehlenswert.

Manuelles Backup – Schritt für Schritt

Anmelden via SSH

Hinweis vorab: Der Anmeldevorgang kann je nach Hoster unterschiedlich ausfallen. Auch das Thema Cronjob weiter unten kann abweichen. Sollte man Schwierigkeiten haben sollte man sich nicht scheuen zu googlen oder seinen Hoster zu kontaktieren.

Zunächst braucht man eine SSH Verbindung zum Server seines Anbieters. Mac Nutzer können auf das vorinstallierte Terminal zugreifen, Windows Nutzer können eine entsprechende Software herunterladen, wie beispielsweise Putty.

Meistens findet man auf der Webpage des Hosters Informationen zum „SSH Zugang“, wenn man sich dort einloggt.

So ein Login kann dann in der Konsole etwas so aussehen:

ssh benutzer@example-server.com

Shopware Ordner und Navigation

Meistens befindet sich die Shopware Installation im Pfad /var/www/shopname

Zum www Ordner navigiert man über cd /var/www/ den Inhalt des Ordners sieht man mittels ls

Jetzt gilt es zwei Dinge zu sichern: Die Datenbank und den Shop selbst.

Datenbank sichern

Zunächst sollte man einen Ordner anlegen, der später alle Backup Dateien enthalten wird

 mkdir backups

 

Eine Sicherungsdatei der Datenbank wird auf dem Server abgelegt über:

 sudo mysqldump -uroot -p datenbankname > backups/dbbackup.sql *

Für diesen Befehl sollte allerdings auch das Password für die Datenbank zur Hand sein. ‚datenbankname‘ wird durch den Namen der Datenbank ersetzt (wie zu erwarten), bei ‚dbbackup.sql‘ kann ein eigener Name verwendet werden. Grundsätzlich ist aus Übersichtsgründen zu empfehlen, das aktuelle Datum in den Dateinamen zu schreiben.

 

Die Wiederherstellung der Datenbank aus der Datei geschieht mittels:

(Nur ausführen, wenn man das Backup benötigt)

 mysql -uroot -p < backups/dbbackup.sql *

*Wir gehen hier davon aus, dass wir uns im www Ordner befinden, in dem wir den Ordner Backups angelegt haben.

Shop sichern

Um eine Sicherungsdatei auf dem Server abzulegen nutzen wir den tar Befehl:

(Als Erinnerung: Mit ls überprüfen wir den Inhalt eines Ordners – Unser Shopware Shop sollte im www Ordner liegen)

 tar -cvzf backups/backup_datum.tar.gz shopOrdner/

 

Um aus der Backup Datei die Rücksicherung zu gewinnen nutzt man den Befehl :

(Nur ausführen, wenn man das Backup benötigt)

 tar -xvzf backups/backup_date.tar.gz *

*Vorher sollte der original Ordner aber besser verschoben oder umbenannt werden.

 

Möchten wir jetzt eine Backup Kopie auf unseren Lokalen Rechner ziehen, können wir das mit rsync ganz gut bewerkstelligen:

Aufbau des Befehls:

Wir ergänzen jetzt noch eine Option für den Befehl um Cache- und Mediendateien auszuschließen:

(Wir befinden uns immer noch im www Ordner)

rsync --exlude='shopOrdner/var/cache/production_*' --exclude='shopOrdner/media' -av benutzer@example.com:/var/www/shopOrdner /lokalerPfad

 

Automatisierte Backups mit Cronjobs

Dass die manuelle Sicherung von Datenbank und Shop-Dateien gelingt, sollte Hauptaugenmerk sein. Man kann diese Sicherungen durch sogenannte Cronjobs automatisieren.

Hinweis: Wie oben kurz erwähnt unterscheidet sich die Vorgehensweise allerdings von Hoster zu Hoster. Das liegt an den unterschiedlichen Arten von Linux und Editoren, die genutzt werden. Trotzdem gehen wir einmal darauf ein, wie Cronjobs generell strukturiert sind.

Befinden wir uns in der Konsole geben wir einmal folgenden Befehl ein:

crontab -e

Jetzt sollte man darauf achten, was für ein Texteditor genutzt wird. Die Handhabung dieser unterscheidet sich teils stark. Um diese zu benutzen muss man sich ein paar Tastenkürzel aneignen, die aber auch von Editor zu Editor unterschiedlich sind. Deswegen hilft an dieser Stelle nur eins: Nachschauen, wie der Editor heißt (z.B. ’nano‘ oder ‚vi‘) und googlen wie man den bedient. Eine Auflistung oder genaue Anleitung dafür würde den Rahmen dieses Artikel weit sprengen.

Aufbau eines Cronjobs

Ein Cronjob setzt sich aus fünf Zeitwerten und dem auszuführenden Befehl zusammen. Auf den ersten Blick wirkt das unter Umständen verwirrend. Nach ein, zwei Beispielen sollte aber klar werden, wie das ganze funktioniert.

Von Links nach Rechts stehen die Sterne für:

  1.  Minute (0 – 59)
  2.  Stunde (0 – 23)
  3.  Tag (1 – 31)
  4.  Monat (1 – 12)
  5.  Wochentag (0 – 7   Sonntag ist 0)

Der selbst beinhaltet alle möglichen Werte für ein Feld. Soll heißen, ein * an der Stelle Stunde steht für ‚jede Stunde‘. Ein * beim Monat steht für ‚jeden Monat‘. ‚* * * * * Befehl‘ steht also für ‚Jede Minute, zu jeder Stunde, zu jedem Tag, zu jedem Monat‘ wird ‚Befehl‘ ausgeführt.

Beispiele:

0 2 * * * tar -cvzf /var/www/backups/backup.tar.gz /var/www/shopOrdner

Der Befehl wird zur ’nullten Minute‘ um zwei Uhr morgens, täglich ausgeführt.

0 15 * * fri scp benutzer@example.com:/var/www/backups /lokalerPfad *

Jeden Freitag um 3 Uhr Nachmittags wird der Backup Ordner auf dem Server auf den Lokalen Rechner kopiert.

*Damit dieser Befehl am Ende auch umgesetzt wird muss der eigene Rechner allerdings auch hochgefahren und verbunden sein.