Hallo, wir gehen demnächst mit unserem Shop live und ich überlege momentan, wie eine für uns ausreichende Backup-Strategie aussehen könnte. Für unsere Zwecke reicht es vermutlich 1x am Tag einen DB-Dump zu machen. Hat jemand eine Idee, wie ich das automatisiert mache? Das muss ja von einem anderen Server aus passieren, oder? Wenn jetzt der produktive Server abrauchen sollte, wie bekomme ich dann schnell den Shop wieder zum laufen? Reicht es einfach die Shopware-Dateien auf ein neues System zu kopieren und das DB-Dump einzuspielen… ist dann auch tatsächlich alles wieder lauffähig? Ich schätze dass Bilder nicht in der Datenbank gespeichert werden, oder? Die wären dann ja nicht im neuen System dabei… Welche Backup-Strategie habt ihr denn so? Grüße Constantin
Hi Ottscho, das hatte ich auch schonmal, ist aber die Datenbank enorm groß wie bei einem Kunden dann geht das Tool von dir auch nicht mehr. Soweit ich weiß soll beim 3.5.4 Update da was dabei sein…
Hallo Ottscho, da du das Plugin ja selbst geschrieben hast, kannst du mir vielleicht sagen, was denn alles über die DB-Tables hinaus sicherungsrelevant ist? Grüße Constantin
Hi, ab einer entsprechenden Datenbankgröße solltest du das mit deinem Webhoster besprechen. Häufig bietet dieser passende Lösungen an, oder hat entsprechendes abgebildet. In mancher Verwaltungs-Software z.B. findet man auch entsprechende Funktionen. Plesk beispielsweise bietet dafür die passenden Optionen. Damit wird das automatisch Backup zum Kinderspiel. Meist landet das Backup auch auf einem kostenlosen Backup-Space, und wird nicht einmal am Tag ungeschützt durchs Netz verschickt. Ansonsten lässt sich sowas auch mit mysqldumper und einem Cronjob realisieren. Das kostenlose Tool kommt auch sehr gut mit sehr großen Datenbanken zurecht. http://www.mysqldumper.de/ Viele Grüße, Michael
Hi mediamilkshake, danke für deine Tipps, wie ich die DB sichern kann. Hast du auch noch eine Idee wie ich den Rest sichern kann - also z.B. Bilder von Produkten oder Bannern? Danke! Constantin
Ich habe mir jetzt folgende Lösung überlegt: Jeden Tag läuft ein CRON-Job, der ein Skript ausführt. Das Skript mach das Folgende: 1. Ins Shop-verz wechseln 2. MYSQL-Dump: mysqldump --opt --u --p --databases <db_name> > dump.sql
-
Packen aller Inhalte im Shop-Verz (inkl. dump.sql)
tar cfj * <file_name.tar.bz2> -
Backup per Mail an mich.
Im Fall der Fälle muss ich nur auf dem neuen Server das Backup auspacken und die dump.sql einspielen.
Klingt eigentlich ganz gut, oder?</file_name.tar.bz2></db_name>
Hi, das ist eine Lösung die ich als ideal bezeichnen würde. Lediglich der Versand per E-Mail ist nicht so das wahre - schließlich handelt es sich um recht kritische und wichtige Daten. Wenn das Backup anschließend auf einen seperaten Backup-FTP verschoben wird, wäre das im Prinzip eleganter. Viele Hoster bieten einen kostenlosen FTP-Space an. Viele Grüße, Michael
Hi Michael, ja das mit der Mail ist nicht so super - vor allem sind das locker mal 30+X MB und die lässt mich mein Provider nicht per Mail verschicken. Wie kann ich denn per Kommandozeile einen FTP-Upload machen? Grüße Constantin
Falls jemanden an einer Lösung interessiert ist - hier ist ein Python-Skript, das * einen Dump der DB erzeugt, * diesen DB-Dump zusammen mit allen Dateien des Shops in eine tar.bz2 packt * und das diese tar.bz2 in ein S3 bucket hochschiebt. Damit das Skript laufen kann, sind folgende Dinge notwendig: * ein AWS-Account, um den S3 nutzen zu können, * das Tool s3cmd (http://s3tools.org/s3cmd) muss installiert und konfiguriert sein * und im Python-Skript müssen die Parameter für die Datenbank und den S3-Bucket gesetzt sein. # Requires s3cmd to be installed and configured (http://s3tools.org/s3cmd) import os, datetime, subprocess, shlex, tarfile backup\_dir = "" backup\_db = "" db\_user = "" db\_psw = "" s3\_bucket = "" def main(): today = datetime.date.today() tmp\_sql = "%s.sql" % today tmp\_backup = "%s.tar.bz2" % today os.chdir(backup\_dir) print "Dumping database..." # dump mysql db into file cmd = "mysqldump --opt -u %s -p%s --databases %s" % (db\_user, db\_psw, backup\_db) out = open(tmp\_sql, "wb") try: subprocess.call(shlex.split(cmd), stdout=out) finally: out.close() print "Compressing backup..." tar = tarfile.open(tmp\_backup, "w:bz2") tar.add(backup\_dir) tar.close() print "Uploading to S3..." cmd = "s3cmd put %s %s" % (tmp\_backup, s3\_bucket) subprocess.call(shlex.split(cmd)) os.remove(backup\_dir + os.sep + tmp\_sql) os.remove(backup\_dir + os.sep + tmp\_backup) if \_\_name\_\_ == "\_\_main\_\_": main()
Zur ursprünglichen Frage nach einer Backup Strategie zurück: Auch wenn es Werbung sein mag, schau Dir mal die virtuellen Server von HostEurope an. Da ist ein tägliches Backup des kompletten Servers inklusive. Und über das Kundenportal (heißt KIS bei denen) kann man ganz bequem aus den letzten 14 Tagen auswählen welche Datei des Backups man zurückgespielt haben möchte. Das sollte als Grundsicherung ausreichend sein und wenn man auf Nummer Sicher gehen will ist kann man z.B. noch Plesk zusätzlich Backups anlegen lassen und sperat speichern. Das sollte eigentlich bis zur Einstellung “mittlere Paranoia” ausreichend sein und man muß nicht einen Handschlag machen wenn es mal eingerichtet ist. Und sind wir mal erhlich, Speicherung des Backups in einem Storage Netzwerk sollte jeder in Betracht ziehen, den diese heimischen Festplatte geben immer zu den unpraktischsten Zeiten auf. Und selbst Raid0 ist nicht immer das Wahre, denn es soll vorkommen das der Techniker des Hersteller nach 6 Stunden eingestehen muß das man einen undokumentieren Fehler gefunden hat. Ich spreche aus Erfahrung
Ist es eigentlich notwendig, die Dateistruktur jeden Tag zu backuppen? Reicht es nicht, nur ein tägliche MySQL dump zu machen, und die Dateistruktur nur zu backupppen, wenn ein neue Seite erstellt wurden? Wenn mann ja ein neues Artikel im Backend erstellt, ändert sich die Dateistruktur doch nicht? Oder wirden Bilder nicht im MySQL gespeichert?
produktbilder werden nicht in der datenbank abgelegt sondern im media-ordner
Kleine Anmerkung noch, weil hosteurope erwähnt wurde: Ein backup nützt leider bei den vServern von hosteurope nix mehr, wenn 3mal in 4 Tagen der Wirtsrechner komplett ausfällt für jeweils mehrere Stunden am Tag. Letzte Woche erlebt. Großzügig hat mir hosteurope eine Monatsmiete erlassen und inzwischen meinen shop auf einen anderen Wirtsrechner übertragen, was allerdings wieder mit einem Ausfall verbunden war. Weil das natürlich auch bei anderen Providern passieren kann, benötigt man eigentlich mindestens 2 Server auf unterschiedlichen Rechnern für eine wirklich gute Absicherung, weiß ich inzwischen.