Ich weiß, dass die Migration eine Möglichkeit zur Versionskontrolle für das Datenbankschema darstellt. Da ich jedoch eine Datenbank habe, die von mehreren Projekten gemeinsam genutzt wird, kann jedes Projekt das Schema ein wenig ändern. Also würde ich etwas wie Verzweigung und Zusammenführungsfunktion wie git für Codes benötigen, wo Migration solche Funktion nicht geben kann. Also, gibt es eine Versionskontrolle speziell für die Datenbank?
Wir verwenden php mit laravel und mysql für die Datenbank, und wir sind bereit, bei Bedarf zu postgresql zu wechseln.
Sie können alle Ihre setup .sql
-Dateien im Git-Repository für das Projekt einrichten. Da Sie erwähnt haben, dass viele Projekte diese Datenbank verwenden, könnte es sinnvoll sein, für die Datenbank ein einziges Repository ausschließlich zu verwenden:
Beachten Sie, dass das folgende Verzeichnis von git verwaltet wird:
%Vor% setup.php
kann jetzt verwendet werden, um alle .sql
-Dateien im Setup-Verzeichnis auszuführen, damit die Bereitstellung / Klonierung der Datenbank vereinfacht wird. Wenn Sie Änderungen an Ihrer Datenbank vornehmen müssen, verwenden Sie einfach die bereits in git integrierten Funktionen, um Änderungen in dieses Repository zu verzweigen und zusammenzuführen.
Wie oben erwähnt, gibt es viele Tools für Unternehmen. Persönlich bin ich gegangen, um mein eigenes zu schaffen. Ich benutze eine API dipdeploy.
Es funktioniert: Schreiben Sie Ihre inkrementellen Skripte 1_c_table_t.sql 2_c_uk_index_t.sql ... Es erfordert eine Tabelle in der Datenbank, wo alle Dateinummern gespeichert werden. Nach dem erfolgreichen Einfügen der SQL-Anweisung fügt sie eine Insert-Anweisung in eine Versionstabelle ein.
Mehrere Teams arbeiten daran, ich erstelle einen Repo in Github und alle Entwickler-Repos hängen davon ab. api verwendet die erste Ziffer, um das Skript zu identifizieren.
Danke
Ich arbeitete für eine Firma, die Hooks auf unserem Quellcodeverwaltungsserver hatte, der bei einem Commit ein Skript ausführen würde, das im Kern einen MySQL-Schemadump aus unseren Entwicklungs- und Staging-Datenbanken und aus dem Unterschied zwischen diesen erstellte Schemas, es würde ein SQL-Skript erstellen, das bei Ausführung eine dritte Datenbank (eine Kopie des Staging) ändern würde, um eine Datenbank mit dem gleichen Schema wie Dev zu erstellen, die jedoch alle Daten zum Staging enthält. Es würde dann anschließend alle Tests ausführen, und wenn sie erfolgreich waren, würde es das SQL-Delta-Skript anzeigen, das für die Produktion sicher ist.
Solange Sie ein Ereignis haben, an dem Sie ein Skript ausführen könnten, könnten Sie in ähnlicher Weise ein SQL-Skript generieren, das das Schema auf das neue Delta weiterleitet
Die Alternative wäre einfach, das sql-Schema in der Versionskontrolle bei jeder Änderung im Auge zu behalten, aber das würde dann bedeuten, dass ein Mensch benötigt würde (aus dem vereinheitlichten Diff), welche SQL benötigt würde, um die Änderung zu implementieren .
Die Antwort ist einfach. Verwenden Sie einfach eine .sql
-Datei, die das Datenbankschema angibt. Verzweigen und ändern Sie die .sql-Datei für Sie nach Bedarf. Sie können alles angeben, was Sie benötigen, wie die Erstellung der Datenbank und der Tabellen.
Wenn du etwas zu Beginn brauchst, kannst du mysqldump
auf deiner db machen und damit beginnen. Nachdem Sie die Datei in der Quellcodeverwaltung haben, sind Verzweigung und Zusammenführung direkt danach.
Eine andere Option wäre, Ihren Basis-Db-Dump zu erstellen und dann verschiedene Alter-Scripts zu verwenden, die die Datenbank an Ihre Bedürfnisse anpassen könnten. Lassen Sie die verschiedenen db-Dumps von den verschiedenen Projekten laden, und wenden Sie die entsprechenden Skripts an.
Mit einem Tool wie Phinx können Sie viel mehr Optionen und Funktionen haben. Link zum github-Repository Ссылка
Tags und Links php mysql database version-control version-control-migration