2009-11-23 11 views
30

Fragen, ob es möglich ist, eine Versionskontrolle einer MySQL-Datenbank zu haben.MySQL Versionskontrolle - Subversion

Ich weiß, diese Frage gestellt wurde, bevor jedoch die neueste vor fast einem Jahr ist, und mit der Rate Dinge ändern ...

Das Problem kommt, dass jeder Entwickler Apache hat/MySQL/PHP auf ihrem eigenen Computer, mit denen sie manchmal die Datenbank bearbeiten. Es ist eher unpraktisch, wenn sie eine E-Mail an alle anderen Entwickler senden und dann die Testserver-Datenbank manuell bearbeiten müssen.

Wie gehen Sie mit diesem Problem um?

Dank

+0

Sie haben auch DBV: http://Stackoverflow.com/a/13837473/6309 – VonC

Antwort

15

Dies ist kein MySQL-bezogene Lösung in sich selbst, aber wir haben viel Erfolg mit einem Produkt namens liquibase hatte. (http://www.liquibase.org/)

Es ist eine Migrationslösung, die viele verschiedene Datenbankanbieter abdeckt und erlaubt, alle Datenbankänderungen in Konfigurationsdateien zu kodieren, die alle in Subversion gespeichert sind. Da die gesamte Konfiguration in XML-Dateien gespeichert wird, ist es einfach, die Änderungen anderer Personen in das Hauptskript zu integrieren und es spielt sich gut mit Tags und Zweigen ab.

Die Datenbank kann mit dem Befehl "update database" auf die aktuelle Revisionsebene gebracht werden. Die meisten Änderungen haben auch die Möglichkeit, eine Datenbankänderung rückgängig zu machen, was ebenfalls hilfreich sein kann. Ich würde empfehlen, dass Sie vor dem Ausführen der Migration sicherstellen, dass Sie auf dem neuesten Stand sind, da dies wahrscheinlich am einfachsten ist.

Schließlich können Sie bei einer Produktionsbereitstellung wählen, dass alle Datenbankänderungen als vollständiges SQL-Skript ausgegeben werden, damit DBAs sie ausführen und eine Aufgabentrennung aufrechterhalten können.

Bis jetzt hat es wie ein Charme gearbeitet.

+0

Das sieht wie eine ausgezeichnete Lösung - Vielen Dank! – user103219

+0

Sie können auch maatkit verwenden, das in vielen Linux-Distributionen integriert ist. Es ist ein kleines Dienstprogramm, maatkit, und es baut keine Abhängigkeiten zwischen sich selbst und anderen Programmen auf. –

+0

Wirklich cool Ansatz. – funktioneer

1

Nun wir verwenden Rails, die alle Änderungen in den Migrationsdateien behält. Ich weiß, dass ein paar PHP-Frameworks das Gleiche tun - zum Beispiel Symphony. Wenn also alle Änderungen in unserem Repository zusammengeführt sind (wir Benutzer mercurial), können wir alle Änderungen in Migrationen sehen, die auf die Datenbank in der Entwicklung angewendet werden müssen oder wurden. Dann gibt die für die Produktion verantwortliche Person den Code für die Produktion frei, nachdem eine vollständige Sicherung vorgenommen wurde. Wenn Sie jedoch kein PHP-Framework verwenden, das sich darum kümmert, klingt der Vorschlag von awarded sehr interessant - ich habe vorher noch nichts von liquidbase gehört, aber ich werde es auf jeden Fall überprüfen.

1

Es gibt ein Tool namens iBatis, jetzt MyBatis genannt, das Versionen von Datenbanken perfekt verarbeitet.

Es braucht ein wenig Arbeit, um alle Ihre Änderungen im Skript statt mit einem grafischen Werkzeug zu haben, aber wenn Sie mit der Programmierung vertraut sind, ist das kein Problem.

Wenn Sie mehrere Datenbanken haben (wie dev-test-prod), erstellen Sie nur 3 Umgebungsdateien und Sie können eine Umgebung mit nur einer Befehlszeilenanweisung aktualisieren.