Was ist der Beste Weg zum Shop Backup?

Hallo, 

ich mache mir gerade Gedanken über die richtige Backup Strategie. Ich möchte ein regelmäßiges Backup (File System und DB) meiner Shop Instanzen machen. Folgende Dinge habe ich aktuell im Kopf: 

File System Backup: 

Mithilfe eines Scriptes verbinde ich mich über SFTP auf den Server und lade das gesamte RootDir herunter. Dabei überspringe ich den Ordner /var, weil ich die Cache Dateien nicht im Backup haben möchte. Als Variante könnte ich auch erst das RootDir auf den Server packen und anschließend den TarBall herunterladen.

Zum File System Backup habe ich folgende Fragen: 

  1. Wie gehe ich mit Dateirechten um, in einer Situation in der ich das gesamte File System Backup zurückspielen muss? Die Rechte der einzelen Dateien und Ordner gehen doch bei herunterladen bzw. wieder heraufladen verloren. Wie kann ich sicherstellen, das ich nach der Wiederherstellung, wieder die gleichen Datei und Ordner Rechte habe?

  2. Wenn der Ordner /var nicht existiert, legt ihn shopware von alleine an wenn es die Cache Datein erzeugt oder laufe ich auf einen Fehler? 

DB Backup: 

Für das DB Backup würde ich gerne den mysql Dumper (http://www.mysqldumper.de/) einsetzen. Hat von Euch jemand Erfahrungen im Zusammenhang mit shopware gesammelt?

Wie managed Ihr Eure Backups? Ein Plugin möchte ich ungern nutzen. 

Vielen Dank.

Bzgl. der Files würde ich mit rsync arbeiten. Eine sehr gute Alternative wäre das Backup mittels der AWS CLI, sodass du hier relativ einfach die Backups per Cron anstupst, weche dann zügig auf S3 geuppt werden.

Oder wenn du es super simpel machen willst, bspw. den Service https://ottomatik.io/

Das DB Backup kannst du natürlich mit dem mysqldumper machen, oder mit einem einfachen Shell Skript oder ähnl. Das hat mit Shopware nicht wirklich etwas zu tun. Hier bspw. ein simples Shell Skript: http://alvinalexander.com/mysql/mysql-database-backup-dump-shell-script-crontab

Welches du natürlich ein wenig erweitern kannst, dass das DB Backup direkt auf bspw. S3 geuppt wird oder ähnl.

1 Like

Hallo!

Mysqldumper ist eine gute Wahl. Du kannst das perl-script verwenden. Ich verwende das Perl-Script, das ja automatisch dabei ist.
Anleitung gibt’s hier: http://forum.mysqldumper.de/features-perl-cronscript-einstellungen-von-konfiguration-cron-t502.html

Den Cronjob lasse ich über einen externen Anbieter laufen, zum Beispiel hier: https://www.cron-job.org/de/

1 Like

Danke @kayyy und @kido … was denkt ihr über die Rechte? @kayyy  wenn du Deine Files aus S3 zurückholst musst du da nicht die Rechte neu setzen? Wenn ja wie gehst du vor?

Ich setze die Rechte meist so:

chown -R www-data:www-data *
find * -type d -print0 | xargs -0 chmod 0755 
find . -type f -print0 | xargs -0 chmod 0644

Hängt aber davon ab mit welcher Gruppe, welchem Benutzer apache läuft.

Da ich PHP-FPM nutze müssen die Rechte in der Regel nicht gesetzt werden, hier ist auch noch ein guter Beitrag über Rechte File permissions and umask in PHP and Shopware

Der User sollte natürlich entsprechend der eigene User sein und nicht der root User oder dergleichen. Ansonsten gibt es natürlich Probleme mit den Rechten.

Ich benutze einen cron Dienst easycron.com namens cron PHP-Skript auslösen zu laufen und ein Tutorial bei How to set up cron job for Shopware , sehr einfach einzurichten.

Hello, can anyone please assist me. We are using  Shopware 4.2.3    How do I do a backup ? Thank you.

Danke für Euer Feedback.

Den S3-Ansatz von @kayyy‍ finde ich am Besten. Ich habe mir jetzt ein Script gebaut, welches mir Datenbank und Filesystem Backups erstellt und diese in einem S3 Bucket sichert. Das Script rufe ich über die Server CRON-Tab alle 24h auf. Je nach übergeben Parameter erstellt es einen DB Dump oder ein Fielsystem Backup. 

Alle die etwas mehr Details wollen können jetzt weiterlesen: 

Im Gegensatz zu @kayyy‍ verwede ich die AWS SDK um mit dem amazon API zu kommunizieren. Je nachdem mit welchen Parameter das Script aufgerufen wird, erstellt es einen DB-Dump oder ein Filesystem Backup. In beiden Fällen füre ich mithilfe von Process (Symfony Componente) OS Komandos aus. Das erschin mir einfacher, als alles über PHP zu lösen. 

DB Dump:  

$process = new Process("mysqldump --lock-tables --opt --compress --extended-insert -u {$dbconf["db"]["username"]} -p{$dbconf["db"]["password"]} {$dbconf["db"]["dbname"]} | gzip > {$target_dir}{$dumpname}");

Die Datenbankinformationen lese ich vorher aus der config.php der Shop installation. 

Filesystem Backup:   

$process = new Process("tar cfpz $target_dir$tarball $rootDir --exclude=var");

Ich packe das gesamte RootDir und schliesse dabei das var/ Verzeichnis aus. Da ich die Cache-Dateien nicht mit sichern möchte. 

Sowohl DB- als auch Filesystem-Backup speichere ich auf dem Server zwischen, before ich sie mit dem AWS SDK zu S3 lade. Nachdem alle Dateien erfolgreich zu S3 übertragen wurden lösche ich die Backups von meinem Server. Für die Datei Operationen verwende ich die FinderKomponente.

S3 Konfiguration: 

Auf der Seite von S3 habe ich mir einen Bucket in Frankfurt angelegt (Kundendaten, Datenschutz,  Deutschland, usw. ). In diesem Bucket gibt es zwei Ordner, einen für DB- und einen für Filesystem-Backups. Weiter habe ich S3 so konfiguriert das es alle Daten die älter als 30 Tage sind automatisch löscht. Somit halte ich die Kontrolle über meinen Speicherbedarf bei AWS.

 

Bis jetzt klappt das alles Super. Theoretisch könnte man den Intervall der Backups reduzieren z.B. Alle 12h Filesystem und je Stunde DB. Da muss ich noch etwas experimientieren, da beim DB Backup die Datenbank Tabellen gesperrt werden.

@NextMike Danke für die Rechte aber da ich mit tar cfpz packe, sollten die Rechte mitgesichert werden. 

Restore werde ich in den nächsten Tagen testen. 

6 Likes