Alex: Backup von Dateien und DB

Hallo,

da ich mit der Test/Beta-Phase meines Projekts jetzt so langsam fertig bin ist mir (ja, ich weiß - zu spät ;)) eingefallen, dass ich doch mal ein Datensicherungskonzept aufstellen könnte.

Ohne lange nach fertigen Lösungen zu suchen habe ich deshalb heute mal begonnen ein Backup-Tool (in PHP) zu programmieren.

Die Dateien werden in ein Tar-Archiv verfrachtet und dann per FTP auf einen anderen Server geladen. Danach wird - wenn der Upload geklappt hat - die Datei gelöscht. Das klappt schon wunderbar.

Für die Datenbank werde ich dann einen Dump erzeugen lassen, der auch auf den Server geladen wird.

Im Logfile wird alles protokolliert, was passiert ist (z.B. Packen der DAteien, Verbindung FTP, Upload FTP, Dateiname etc.). So habe ich also immer auf dem Produktivserver das Logfile mit sämtlichen Dateinamen (und damit auch Zeitpunkten) der Sicherungen. So kann ich erstens schnell schauen, wann gesichert wurde und 2. würde es auch eher auffallen, wenn etwas am FTP-Server fehlt.

Ich hoffe das klingt bis jetzt so vernünftig. Hättet ihr es auch so gemacht? Was würdet ihr anders machen? Würdet ihr eventuell doch ein fertiges Tool nutzen? (Mir wäre es hier wichtig, das es zumindest voll in mein Admin-Backend von dem Projekt integrierbar ist)

Jetzt aber zu noch ungelösten Fragen - hier bräuchte ich Tipps von erfahreneren Programmierern :)

Wie oft soll so eine Sicherung gemacht werden?
Sicherung der Dateien:
Die Website an sich ist denke ich mal schon sehr gut gesichert. Die Skripte etc. ändern sich nicht sehr häufig. Wenn es Änderungen gibt, läuft das über meinen Computer (Dreamweaver,  Site) die Dateien sind also in der gleichen Struktur auch auf meiner Computer-Festplatte. Dann arbeite ich auch noch mit SVN - die Daten sind da also auch nochmal gesichert (aber leider noch auf der gleichen Festplatte, obwohl ich zwei interne habe...). Zusätzlich macht der Computer noch täglich ein Backup auf meinen NAS.

Das einzige Problem ist, dass User Bilder hochladen können. Die sind nicht auf meinem Laptop - oder zumindest nicht immer alle. Deswegen ist ein Backup also schon mal sehr wichtig.

Wie häufig wird so ein Backup bei einer professionellen Webanwendung gemacht? Ich habe für den Cronjob jetzt mal eine Voreinstellung von "monatlich" - das könnte aber zu Problemen führen. Obwohl die Bilder eigentlich nicht sonderlich wichtig sind.

Ein tägliches Full-Backup würde aber auch die 30GB des FTP-Servers ziemlich bald sprengen. Hierzu die nächste Frage - wie lange hebt man solche Backups auf?

Die Lösung des Problems wäre also wohl ein inkrementelles Backup. Das geht mit Tar auch irgendwie, oder? Ich habe schon etwas danach Gegoogelt aber ganz habe ich es noch nicht kappiert...

Zur Datenbank:
Die ist sehr wichtig und da tut sich auch jeden Tag einiges - hoffentlich ;)
Ich lasse das den Cronjob jetzt also täglich machen. Reicht das oder wird das normalerweise noch öfters gemacht?

Hier auch wieder die Frage, wie lange hebt man es auf? Bei der DB ist es aber nicht ganz so wild, weil sie nicht so groß ist, wie das Bakcup der Dateien.

So jetzt habe ich aber viel geschrieben. Ich würde mich einfach über ein bisschen Feedback zu dem ganzen Thema freuen. Vielleicht kennt auch jemand einen guten Link den er mir diesbezüglich empfehlen kann...

Vielen Dank schon mal!

Alex

  1. Hi!

    Ich hoffe das klingt bis jetzt so vernünftig.

    Ob es vernünftig ist, kannst du recht einfach selbst feststellen, indem du mal ein Restore übst. Sinnvoll ist es auch, die Schritte eines Restores zu dokumentieren, denn im Falle eines Falles ist vielleicht schnelles Handeln nach Vorlage gefragt.

    Hättet ihr es auch so gemacht? Was würdet ihr anders machen?

    Dump ziehen und per FTP oder anderer Dateiübertragung wegschreiben geht quasi mit einem Zweizeiler als Shellscript.

    Jetzt aber zu noch ungelösten Fragen - hier bräuchte ich Tipps von erfahreneren Programmierern :)
    Wie oft soll so eine Sicherung gemacht werden?

    Hängt von der Häufigkeit der Änderungen deiner Daten ab und von den Auswirkungen des Verlusts zwischen letzter Sicherung und Absturz.

    Wie häufig wird so ein Backup bei einer professionellen Webanwendung gemacht?

    Es gibt nicht nur eine professionelle Webanwendung. Jede hat andere Anforderungen an die Häufigkeit der Sicherung.

    Ein tägliches Full-Backup würde aber auch die 30GB des FTP-Servers ziemlich bald sprengen. Hierzu die nächste Frage - wie lange hebt man solche Backups auf?

    Auch das ist nicht eindeutig zu beantworten. Manche müssen von Gesetzes wegen über Jahre hinweg aufgehoben werden, andere sind sinnlos, wenn sie älter als 5 Minuten sind.

    Ein Backup beinhaltet auch aktuelle Fehler. Wenn also was geschieht will man vielleicht einen Kompromiss machen zwischen aktuellen aber kompromittierten Daten und alten aber sauberen. Das musst du allein einschätzen können, wie wahrscheinlich das sein kann und wieviel dir das ausmacht.

    Zur Datenbank:
    Die ist sehr wichtig und da tut sich auch jeden Tag einiges - hoffentlich ;)
    Ich lasse das den Cronjob jetzt also täglich machen. Reicht das oder wird das normalerweise noch öfters gemacht?

    Siehe oben.

    Hier auch wieder die Frage, wie lange hebt man es auf?

    Siehe oben.

    Lo!

    1. Hallo,

      Ob es vernünftig ist, kannst du recht einfach selbst feststellen, indem du mal ein Restore übst. Sinnvoll ist es auch, die Schritte eines Restores zu dokumentieren, denn im Falle eines Falles ist vielleicht schnelles Handeln nach Vorlage gefragt.

      »»
      Gute Idee - das werde ich auf jeden Fall machen.

      Dump ziehen und per FTP oder anderer Dateiübertragung wegschreiben geht quasi mit einem Zweizeiler als Shellscript.

      Ganz so kurz habe ich es doch nicht gemacht, wegen den Fehlerqabfragen etc. :)

      Ich wollte es erst als Shellskript machen habe ich konnte nicht herausfinden, wie ich das auf einen anderen FTP Server mit Shell laden kann. Jetzt habe ich es so gemacht, dass mein TAR in PHP über exec("tar ...") erstellt wird und dann die übertragung über die PHP FTP Funktionen ausgeführt wird... Ich hoffe das ist von der Performance her auch so OK...

      Gruß
      Alex

  2. Hallo, was genau willst du denn regelmässig Sichern?

    (1) die PHP Skripte / statische HTML Dokumente, welche deiner Programmierung entstammen
    (2) die Datenbank(en), die dein Projekt im Hintergrund braucht
    (3) Benutzer-Content (wie von dir erwähnt: Benutzer laden bilder hoch)

    zu (1) ... das braucht imho nicht regelmässig vom Server zurückgesichert werden, du hast ja deine ganzen Scripte irgendwann mal fertig, und du bist der Daten-Master dafür, nicht die Website selbst.

    Dann schnür alle Skripte und Resourcen deiner Webanwendung in ein ZIP/TAR/WASAUCHIMMER Paket zusammen und bewahre es redundant genug bei dir auf. Wenn dann auf dem Server was kaputt geht, das "Deployment"-Paket hochladen und dort entpacken und überschreiben lassen. Evt. solltest du Konfigurationsdateien gesondert behandeln. Die Skripte solltest du selbst ja evt. bereits in einem Versions Management System verwalten von welchem du wieder Backups machst. Über SVN/CVS/VSS/TFS hier zu reden, würde aber zu weit führen.

    zu (2) benutze die Möglichkeiten, welche dir von der Datenbanksoftware geboten werden, vollumfängliche Backups (Dumps) mit Zeitstempel zu machen. Vorallem auch in einer Form, die sich leicht wiederherstellen lässt.

    zu (3) die Dateisystemstruktur auf deinem Server sollte praktisch angelegt sein, z.b. einen Root-Ordner für allen Benutzer-Content, so dass du darauf ein ZIP/TAR machen kannst und beim Wiederherstellen auch das Package an der selben Stelle wieder einfach entpacken kannst. Evt. kannst du darüber nachdenken "Differenz-Sicherungen" zu tätigen. Also zb. immer nur die geänderten Dateien des Tages in ein tägliches Archiv zu packen. Eine Dateiliste von der gesamten Ordnerstruktur hilft die nach dem Wiederherstellen dabei die Komplettheit zu validieren.

    (2) und (3) sollten synchronisiert ablaufen, du willst ja keine Karteileichen haben.

    Unter ökonomischen Aspekten betrachtet: Was bietet dir dein Provider. Provider haben für gewöhnlich Erfahrung im Aufrechterhalten ihrer Infrastruktur und passende Tools implementiert. Frage ihn, welche Sicherungsmöglichkeiten er bietet, wie ein Wiederherstellungsprozess ablaufen würde und was dich das pro Monat kosten würde. Z.b. könntest du beim Provider zusätzlichen Platz auf dessen SAN oder Backuptapes mieten und per Cronjob darauf sichern. Ist aber vielleicht eine Frage des Preises. ;-)

    Cheerio, Frank

    1. Hallo,

      (1) die PHP Skripte / statische HTML Dokumente, welche deiner Programmierung entstammen

      Ja

      (2) die Datenbank(en), die dein Projekt im Hintergrund braucht

      Ja - also das ist so gut wie alles User-Content

      (3) Benutzer-Content (wie von dir erwähnt: Benutzer laden bilder hoch)

      Ja - da gibt es im Dateisystem die Bilder und eben die DB

      zu (1) ... das braucht imho nicht regelmässig vom Server zurückgesichert werden, du hast ja deine ganzen Scripte irgendwann mal fertig, und du bist der Daten-Master dafür, nicht die Website selbst.

      »»
      Klingt eigentlich logisch. Nur wenn ich dann doch mal im Notfall von woanders etwas ändern muss wäre das nicht gleich gesichert...

      zu (3) die Dateisystemstruktur auf deinem Server sollte praktisch angelegt sein, z.b. einen Root-Ordner für allen Benutzer-Content, so dass du darauf ein ZIP/TAR machen kannst und beim Wiederherstellen auch das Package an der selben Stelle wieder einfach entpacken kannst. Evt. kannst du darüber nachdenken "Differenz-Sicherungen" zu tätigen. Also zb. immer nur die geänderten Dateien des Tages in ein tägliches Archiv zu packen. Eine Dateiliste von der gesamten Ordnerstruktur hilft die nach dem Wiederherstellen dabei die Komplettheit zu validieren.

      »»
      Kann ich das über das TAR Programm automatisch machen lassen? So habe ich es bei meiner Google Recherche verstanden - nur wie genau das geht weiß ich leider immer noch nicht.

      (2) und (3) sollten synchronisiert ablaufen, du willst ja keine Karteileichen haben.

      Unter ökonomischen Aspekten betrachtet: Was bietet dir dein Provider. Provider haben für gewöhnlich Erfahrung im Aufrechterhalten ihrer Infrastruktur und passende Tools implementiert. Frage ihn, welche Sicherungsmöglichkeiten er bietet, wie ein Wiederherstellungsprozess ablaufen würde und was dich das pro Monat kosten würde. Z.b. könntest du beim Provider zusätzlichen Platz auf dessen SAN oder Backuptapes mieten und per Cronjob darauf sichern. Ist aber vielleicht eine Frage des Preises. ;-)

      Wir haben noch kein besonderes Backup beim Provider bestellt, aber er macht selbst standardmäßig Backups von allem. Aber ich denke mir, dass es nicht schladen kann, das auch selbst in die Hand zu nehmen und die Daten noch woanders zu speichern.

      Gruß
      Alex