sync4db

Bei der Entwicklung von cms4xml habe ich auf meinem PC natürlich eine Testumgebung aufgebaut; sprich: Testdatenbank eingerichtet usw. Und natürlich wird auch immer dort fleißig weiter entwickelt, so dass zwischen der Test- und der Realdatenbank beim Hoster naturgemäß Differenzen sind. Diese immer per phpMyAdmin manuell auszugleichen, ist ein Kreuz. Also was lag näher, als sich eine Datenbanksynchronisation zu überlegen.

Erster Gedanke: Eine Datenbankreplikation. Geht nur nicht, weils der Hoster nicht anbietet (naja, hab halt nur Space und keinen root-Server dort).

Zweiter Gedanke: Es wird wohl jemand so etwas anbieten, ist ja kein unübliches Problem. Hmm, leider nichts Rechtes gefunden, weil es muss ja auch beim Hoster installierbar sein, geht eigentlich nur, wenn es in PHP geschrieben ist.

Dritter Gedanke: Dann schreibst eine Client/Server-Geschichte, die mit sich selbst aushandelt, was zu tun ist. Am Besten überträgt sie die Daten per XML.

Vierter Gedanke: So was hatte wir doch schon mal ... beim Zugriff von Blog-Writer- Programmen. Da musste man doch für die Datenbankseite eine xmlrpc-Server implementieren ... Gab es da nicht was als PEAR Klasse? Genau!

Herausgekommen sind zwei PHP-Skripte für die Datenbanktabellen-Synchronisation. Das Prinzip: Das Client-Skript fragt beim Server-Skript nach, wie die md5-Hashes pro Tabellenzeile bei der remoten Datenbank sind und vergleicht sie mit den md5-Hashes der lokalen Datenbank. Bei Abweichungen wird der Inhalt nach Belieben (man kann sich die Richtung aussuchen) ausgetauscht.

Ein wenig Sicherheit ist mit Basic HTTP-Authentification auch eingebaut (SSL würde auch gehen), ein paar Datenbankadministrationsfunktionalitäten wurden dazu geschrieben wie Tabelle leeren, löschen, clonen, kopieren usw. und ein wenig Datensicherung und nützliche Protokolierung muss auch noch sein, wie veränderte Tabellenzeilen werden vorher in eine neue Tabelle kopiert, die abweichenden Tabellenzeilen werden in eine neue Tabelle geschrieben. Fertig ist sync4db, anzuschauen hier.