Hallöle,
für ein Programmsystem mit 73 Programmen und 11 Tabellen ist eine Entscheidung zu treffen, wie die Datensicherung zu erfolgen hat. Das wiederum kann erhebliche Programmierarbeit nach sich ziehen.
Systembeschreibung
Es gibt einen Stammserver im Web, auf den ich Dateien (Programme, Grafiken usw.) per FTP lade und auf dem der Kunde arbeitet. Das heißt, hier liegt auch die aktuelle Datenbank.
Dann gibt es drei Backup-Server. Einer im Web, auf dem bei Ausfall des Stammservers weitergearbeitet werden kann. Ein USB-Stick mit XAMPP bei mir und einer beim Kunden, sodass sogar bei Ausfall der Internet- Verbindung ein Notbetrieb erfolgen kann.
Jetzige Backup-Lösung
Vor Kurzem habe ich ein automatisches Update programmiert. Das heißt, ein Webserver holt sich neue und veränderte Dateien (Programme, Grafiken usw.) sowie neue und veränderte Datensätze vom Stammserver. Der anfragende Server holt sich zunächst eine Liste mit Dateinamen und deren Datum sowie Tabellennamen und deren höchsten last_modified. Dann vergleicht er mit seinem eigenen Bestand und fordert an, was er braucht. Im Fall der Tabellen solche Sätze, die seit seinem eigenen last_modified verändert oder dazugekommen sind.
Dieses Prozedere wird ausgelöst durch den ersten Benutzer am Tag, der sich auf einem Backup-Server anmeldet. Die nächste Anmeldung könnte auch nach einigen Wochen erfolgen, Änderungen sind also "ewig" aufzubewahren.
Problematik: Dateien und Datensätze, die auf dem Stammserver gelöscht werden, bleiben auf den Backup- Servern bestehen. Das ist nicht nur überflüssig, sondern falsch. Gelöschte Daten dürfen natürlich nicht wieder "aufleben".
Fragestellung
Nun ist also die Frage, ob ein Backup jedesmal sämtliche Daten holt, also auch unveränderte bei jedem Backup wieder. Das wäre vom Programmieraufwand wünschenswert, das Ergebnis sehr elegant, weil ohne "Dateileichen". Allerdings vom Datenfluss aufwändig und damit zeitraubend.
Oder gelöschte Datensätze bleiben in der Datenbank und bekommen eine Löschkennung. Dann sind sie einmalig beim Backup dabei und ersetzen ihren "aktiven" Zwilling auf den Backup- Servern. Nicht elegant, denn so ein System wird immer dicker, es läßt sich nicht "verschlanken". Aber die Datenübertragung pro Backup ist deutlich kleiner.
Bei 73 Programmen müsste jede Abfrage um das Feld Löschkennung erweitert werden ***schauder***, es sind sehr komplizierte SQLs dabei. Das wird mit Sicherheit Fehler geben. Und das im Echtbetrieb.
Und alle INSERTS müssten die Möglichkeit bieten, einen "toten" Datensatz wiederzubeleben, denn UNIQUE KEYS würden sonst Datensätze abweisen. Also vor jedem INSERT prüfen, ob der Satz vielleicht doch schon da ist ***schauder-schauder***
Tja, jetzt die Frage: Gibt es einen dritten Weg, an den ich nicht gedacht habe?
Lieben Gruß, Kalle