Gibt es hier jemanden, der Erfahrungen hat mit wirklich großen Backups unter einer eingeschränkten PHP-/IIS-Umgebung.
Die Situation.
- Eine regelmäßig aktualisierte Website mit CMS muß alle paar Monate gesichert werden. Das Datenvolumen (Site, Inhalte, mSQL-Dumps aus 5 Datenbanken) beträgt ca. 500-600 MB.
- Die Sicherung muß ohne professionelle Unterstützung laufen, und auf dem Webserver produziert werden. Gehostet wird auf einer Windows-Shared-Maschine mit normalen Gegebenheiten, einzige Ausnahme, die max_execution_time ist auf 90 erhöht.
- Das ganze muß LAUFEN. So zuverlässig wie möglich. Es darf nicht abrauchen wegen max_execution_time oder kaputten Files.
- Zugriff mit externer FTP-Backupsoftware kommt nicht in Frage, außer, jemand kennt ein Programm, das wirklich auf EINEN Klick sichern kann und mit nachvollziehbarem Aufwand von einem Laien neu aufsetzbar ist.
- zlib zum Erzeugen von ZIPs ist vorhanden.
- exec() und Konsorten sind deaktiviert.
- Es ist wurscht, wie lange der Backupvorgang dann dauert. Er muß nur funktionieren.
An diesen Gegebenheiten ist wenig zu rütteln, ansonsten wärs locker per Shellskript + Cron o.ä. zu machen.
Im Grunde fällt mir nur eine aufgesplittete Skriptlösung ein, die alle Dateien in einzelne ZIPs sichert und kurz vor dem Erreichen der max_execution_time den Stecker zieht, den aktuellen Stand in eine Datei abspeichert und via header() oder Javascript-Redirect (um noch kurz den aktuellen Stand ausgeben zu können) auf das nächste "Häppchen" weiterleitet.
Das habe ich bereits alles stehen - ein Skript, das die Daten erstmal ermittelt und dann ZIPs mit maximal 80 MB Eingangsdaten erzeugt, da kommen dann halt 12 Häppchen-ZIPs á 50 MB bei raus und es dauert im Schnitt 30-40 Sekunden.
Das penetrante ist nun aber, daß schon der rekursive glob(), den ich aufrufen muß, um alle zu sichernden Dateien erstmal überhaupt gelistet zu kriegen, je nach Serverauslastung schon die max_execution_time sprengt.
Muß ich den glob() jetzt auch noch splitten anfangen, oder hat/kennt jemand eine praxiserprobte Lösung, die unter solch widrigen Bedingungen zuverlässig funktioniert?
Denkanstöße sind natürlich auch willkommen, aber ich kann mir grad nichts besseres vorstellen als die Splitterei... Lasse mich natürlich gern eines Besseren belehren
Wenn mir jemand so eine Fragestellung präsentieren würde, würde ich ihm raten, das ganze in den Wind zu schießen und einen dedicated server zu holen. Das kommt aber aus Budget- (Bindung an Provider mit gutem Admin (!) bereits vorhanden) und Handlinggründen (Ich will keinen Umzug machen) nicht in Frage. Also eine echte Nuß zu knacken.
Es dreht sich um ein Projekt mit im Moment wenig Budget, das mir sehr am Herzen liegt.
Die Situation.
- Eine regelmäßig aktualisierte Website mit CMS muß alle paar Monate gesichert werden. Das Datenvolumen (Site, Inhalte, mSQL-Dumps aus 5 Datenbanken) beträgt ca. 500-600 MB.
- Die Sicherung muß ohne professionelle Unterstützung laufen, und auf dem Webserver produziert werden. Gehostet wird auf einer Windows-Shared-Maschine mit normalen Gegebenheiten, einzige Ausnahme, die max_execution_time ist auf 90 erhöht.
- Das ganze muß LAUFEN. So zuverlässig wie möglich. Es darf nicht abrauchen wegen max_execution_time oder kaputten Files.
- Zugriff mit externer FTP-Backupsoftware kommt nicht in Frage, außer, jemand kennt ein Programm, das wirklich auf EINEN Klick sichern kann und mit nachvollziehbarem Aufwand von einem Laien neu aufsetzbar ist.
- zlib zum Erzeugen von ZIPs ist vorhanden.
- exec() und Konsorten sind deaktiviert.
- Es ist wurscht, wie lange der Backupvorgang dann dauert. Er muß nur funktionieren.
An diesen Gegebenheiten ist wenig zu rütteln, ansonsten wärs locker per Shellskript + Cron o.ä. zu machen.
Im Grunde fällt mir nur eine aufgesplittete Skriptlösung ein, die alle Dateien in einzelne ZIPs sichert und kurz vor dem Erreichen der max_execution_time den Stecker zieht, den aktuellen Stand in eine Datei abspeichert und via header() oder Javascript-Redirect (um noch kurz den aktuellen Stand ausgeben zu können) auf das nächste "Häppchen" weiterleitet.
Das habe ich bereits alles stehen - ein Skript, das die Daten erstmal ermittelt und dann ZIPs mit maximal 80 MB Eingangsdaten erzeugt, da kommen dann halt 12 Häppchen-ZIPs á 50 MB bei raus und es dauert im Schnitt 30-40 Sekunden.
Das penetrante ist nun aber, daß schon der rekursive glob(), den ich aufrufen muß, um alle zu sichernden Dateien erstmal überhaupt gelistet zu kriegen, je nach Serverauslastung schon die max_execution_time sprengt.
Muß ich den glob() jetzt auch noch splitten anfangen, oder hat/kennt jemand eine praxiserprobte Lösung, die unter solch widrigen Bedingungen zuverlässig funktioniert?
Denkanstöße sind natürlich auch willkommen, aber ich kann mir grad nichts besseres vorstellen als die Splitterei... Lasse mich natürlich gern eines Besseren belehren
Wenn mir jemand so eine Fragestellung präsentieren würde, würde ich ihm raten, das ganze in den Wind zu schießen und einen dedicated server zu holen. Das kommt aber aus Budget- (Bindung an Provider mit gutem Admin (!) bereits vorhanden) und Handlinggründen (Ich will keinen Umzug machen) nicht in Frage. Also eine echte Nuß zu knacken.
Es dreht sich um ein Projekt mit im Moment wenig Budget, das mir sehr am Herzen liegt.
EDIT:
@ die Teilnehmer des letztjährigen Treffens im Volksgarten: Nein, das hat nichts mit der damals besprochenen Idee zu tun ist aber eine super Übung...
Kommentar