Autor Thema: Datenbankversionierung  (Gelesen 2075 mal)

following

  • Gast
Datenbankversionierung
« am: 08. August 2012, 18:05:54 »
Als Übegangsschritt bis zur geplanten Datenbankversionierung gibt es ab sofort ein Datenbank-Changelog:

https://github.com/OpencachingDeutschland/server-3.0/blob/master/htdocs/doc/sql/db-changes.txt

Wenn dort geänderte Trigger aufgeführt sind muss stored-proc/maintain.php ausgeführt werden; sonstige Änderungen sind von Hand per phpMyAdmin einzupflegen.

@Micha
Letzteres hatte ich vergessen, bei unserer Entwicklersystem-Session zu erwähnen. Kannst gleich mal üben und das neue Feld "is_publishdate" in der Tabelle "caches" eintragen :)  (vgl. caches.sql):

1. http://oc-devel/pma/
2. Login als root mit Passwort "developer"
3. links die Datenbank "opencaching" wählen
4. links die Tabelle "caches" wählen
5. oben "Struktur" wählen
6. 1 Feld(er) hinzufügen nach date_created
7. Feld: "is_publishdate", Typ: TINYINT, Standard: Benutzerdefiniert: 0
8. Speichern

Offline 4_Vs

  • Vereinsmitglied
  • Vereinsmitglied
  • Large
  • *
  • Beiträge: 3159
  • Freier Cacher
    • vaahsen.de
Re: Datenbankversionierung
« Antwort #1 am: 09. August 2012, 09:02:56 »
Hi Peter,

ich war heute in pma und wollte das neue Feld anlegen, allerdings existierte das schon:
Fehler
SQL-Befehl:

ALTER TABLE  `caches` ADD  `is_publishdate` TINYINT NOT NULL DEFAULT  '0' AFTER  `date_created`

MySQL meldet:

#1060 - Duplicate column name 'is_publishdate'
Whenever I try to plan something, it doesn't seems to work out. So why plan, it only leads to disappointment! (Eddie van Halen)

following

  • Gast
Re: Datenbankversionierung
« Antwort #2 am: 09. August 2012, 11:54:13 »
ich war heute in pma und wollte das neue Feld anlegen, allerdings existierte das schon:

ah, ok, dann war das schon in dem Datenbankupdate drin das ich dir eingespielt hatte

following

  • Gast
Re: Datenbankversionierung
« Antwort #3 am: 11. August 2012, 15:08:07 »
Inzwischen gibt es ein Script, das das komplette Datenbankupdate mit Ausnahme der Tabellenänderungen übernimmt. Damit ist der Gesamtablauf wie folgt:

1. htdocs/doc/sql/db-changes.txt prüfen
2. Änderungen von Hand per phpMyAdmin einpflegen (Trigger ausgenommen)
3. php bin/dbupdate.php


Der letzte Schritt ist dann, den Rest auch noch zu automatisieren, so wie von Robert angedacht. Damit das mit dem Git-Workflow harmoniert wird es neben den .sql-Patches für neue Änderungen bei Bedarf auf welche geben, die nach dem Ausbau eines instabilen Code-Patches die Datenbankänderung wieder rückgängig machen.

Ich denke dass die .sql-Patchdateien halbautomatisch erzeugbar sind: problematisch sind der äußerst seltene Fall einer Feld-Umbenennung, und Änderungen an Feldern, bei denen zusätzlich Daten zu verarbeiten sind, die sich nicht in data.sql befinden - z.B. ein neues Feld mit bestimmten Werten aus anderen Feldern initialisieren. D.h. der Ablauf könnte sein:
  • Die Entwickler checken Änderungen der Datenbankstrukturen per doc/sql/tables ein.
  • Zusätzliche SQL-Kommandos, um Daten weiter zu verarbeiten, sind im Commit-Kommentar zu dokumentieren.
  • Der Entwicklungsleiter merged (in seinem lokalen Klon) den Commit in den master und lässt anschließend ein Script laufen, das eine .sql-Datei mit dem Datenbankpatch erzeugt.
  • Wenn spezielle Kommandos nötig sind, arbeitet er sie von Hand in die .sql-Datei ein.
  • Test
  • Die .sql-Datei wird zusammen mit der Änderung am master hochgeladen.
  • Das bin/dbupdate-Script erkennt, wenn es neue .sql-Dateien gibt, und spielt sie vor dem übrigen Datenbankupdate ein.

Wer mag diese Aufgabe übernehmen und das Script für Punkt 3 schreiben? Es muss ein "git diff htdocs/sql/tables/*" in Bezug auf den Commit-Stand der letzten .sql-Datei machen (die Commit-ID kann z.B. in einem Kommentar in der .sql-Datei hinterlegt sein), daraus entsprechende CREATE/ALTER/DROP-TABLE/INDEX-Statements erzeugen und das Ganze zusammen mit der aktuellen commit-ID in eine neue .sql-Datei schreiben.

« Letzte Änderung: 11. August 2012, 15:23:11 von following »

oliver

  • Gast
Re: Datenbankversionierung
« Antwort #4 am: 11. August 2012, 15:23:11 »
Wer mag diese Aufgabe übernehmen und das Script für Punkt 3 schreiben?

Ich hatte mal damit experimentiert und kann gerne diesen Prototyp beisteuern. Der muss zwar wohl nochmals neu geschrieben werden, aber vielleicht sind ja ein paar Sachen als Anregung für das neue Skript dabei. Die andere Frage ist, ob es da nicht schon fertige Lösungen dafür gibt. Vor 5 etwa Jahren hab ich mal gesucht und nix gefunden, aber vielleicht gibt es ja mittlerweile Projekte die sich damit beschäftigen. Ist ja ein Standard-Problem in der Informatik ...

following

  • Gast
Re: Datenbankversionierung
« Antwort #5 am: 12. August 2012, 02:43:39 »
Ich hatte vor ein paar Wochen auch danach gesucht und nichts für unsere Zwecke brauchbares gefunden.

Kannst du dein Script einfach mal als [code] hier reinstellen? Vielleicht mag es ja jemand als Vorlage nehmen und es zuende führen.

oliver

  • Gast
Re: Datenbankversionierung
« Antwort #6 am: 12. August 2012, 10:24:56 »
Hat mehr als 20kB ... deshalb als Anhang ....


Edit: Die Funktion PMA_splitSqlFile() hatte ich damals von phpBB geklaut ... die extrahiert die einzelnen SQL-Statements in einer SQL-Datei ...
« Letzte Änderung: 12. August 2012, 10:26:30 von oliver »

following

  • Gast
« Letzte Änderung: 22. August 2012, 02:02:05 von following »

following

  • Gast
Re: Datenbankversionierung
« Antwort #8 am: 23. April 2013, 14:44:04 »
Es ist nun eine einfache Datenbankversionierung vorhanden. Wenn eine OC-Installation mindestens auf diesem Stand ist, werden alle weiteren Änderungen per

php bin/dbupdate.php

automatisch eingespielt. Es braucht also nur noch ein 'git pull' und ein 'dbupate', um ein Entwicklersystem zu aktualisieren. (+ 'wget localhost/okapi/update', wenn man die OKAPI verwendet).

Schrottie

  • Gast
Re: Datenbankversionierung
« Antwort #9 am: 23. April 2013, 14:54:43 »
Super!
Und ich sehe schon, ich muss mir ganz dringend mal die Zeit nehmen um mein Develsystem auf aktuellen Stand zu bringen.