Versionskontrolle und Datenbank synchronisieren mit svnchronize
Quelle: http://www.documentroot.net/development/versionskontrolle-und-datenbank-synchronisieren-mit-svnchronize
Wer mit Subversion PHP-Projekte verwaltet, hat sich bestimmt auch oft schon die Frage gestellt, wie man die MySQL-Datenbank elegant mit-synchronisieren kann. Klar, mit mysqldump bekommt man so etwas hin, aber das ist aufwändig, langsam und oft vergisst man es auch einfach. Das schönste wäre doch, wenn Dump-File und MySQL-Datenbank einfach immer synchron sind, ohne dass man was tun muss und ohne dass minütlich ein Cronjob den Prozessor lahm legt. Ich habe mich eine Weile mit möglichen Lösungen beschäftigt und das PHP-Tool, das dabei entstanden ist, möchte ich nun mit der Welt teilen.
Zuerst einmal möchte ich unnötigen Flame-Wars vorbeugen. Viele Leute vertreten die Meinung, Daten haben nichts in einem VCS-Repository zu suchen. Ich verstehe die Philosophie dahinter, aber in der Realität siehts meist anders aus. Man denke z.B. an eine Applikation, die verwendete Module in der DB registriert. Angenommen, wir finden irgendwo einen Bug und müssen mittels Rollback nach der Ursache suchen. Ohne Verwaltung der DB per Versionskontrolle ist es nicht ohne Weiteres möglich, auf Versionen vor der letzten Modulinstallation zurückzuspringen, da die Datenbank dann noch Informationen über ein Modul enthalten würde, welches ja gar nicht mehr da ist. Die Strategie “keine Daten in VCS” hebelt somit einen der mächtigsten Vorteile von Versionierungssystemen aus.
(Und das war nur ein Beispiel von Fällen, in denen DB-Synchronisation das Leben einfacher machen würde.)
Um das Problem in den Griff zu kriegen, habe ich ein PHP-Tool geschrieben, das in die Applikation eingebunden werden kann und völlig transparent Änderungen zwischen der Datenbank und den ausgecheckten Dumps synchronisiert. Das Ganze läuft sehr flott, da das Tool stets im Blick hat, welche Daten geändert wurden und beim Sync nur die nötigen Aktualisierungen vornimmt.
Zusätzlich gibt es ein kleines Web-Interface zur Konfiguration und zur manuellen Kontrolle der auszuführenden Aktionen.

Das Web-Interface. Es wurde ein inkrementeller Sync gestartet.
Wie es momentan aussieht, kann ich das Projekt vorerst nicht aktiv weiterentwickeln, daher habe ich es per GitHub veröffentlicht. Ich hoffe, auf diesem Weg Leute zu finden, die die Entwicklung etwas weitertragen können. Zu finden ist das Projekt unter
http://www.github.com/mbleichner/svnchronize
Feel free to fork!
Ich hoffe, dass ich die Welt um etwas Nützliches erweitert habe und wünsche allen viel Erfolg, die svnchronize ausprobieren!
| Software-Entwicklung | datenbank, dump, git, github, mysql, php, subversion, svnchronize, sync, synchronisieren, vcs, versionskontrolle |