Lösung für die Versionskontrolle und Bereitstellung der Datenbank?

11

Derzeit verwende ich ein Dump-Skript und übertrage die Datenbank auf das Git-Repo. --skip-extended-insert --skip-comments --skip-dump-datebedeutet, dass ein Diff mir eine gute Vorstellung davon geben kann, was sich geändert hat, aber alles fällt zusammen, wenn ich versuche, es zusammenzuführen.

WP_SITEURL, WP_HOME und alle anderen Orte, an denen WordPress vollständige URLs speichert, müssen beim Import auf einen anderen Host aktualisiert werden (Testen, Staging, Produktion).

Verwendet jemand eine bessere Methode?

Hauptprobleme:

  • Wordpress speichert vollständige URLs in der gesamten Datenbank (nicht portierbar).
  • Viele andere, nicht relevante Datensätze ändern sich
    • auto_increment-Werte (ich entferne diese nur, bin aber auf ID-Probleme gestoßen)
    • Zeitstempel (können möglicherweise auch entfernt werden)
    • vorübergehende * Aufzeichnungen ... keine Ahnung, was mit ihnen zu tun ist

Ein Prozess, bei dem zeitgestempelte Migrationen erstellt wurden, bei denen nur die Dinge hinzugefügt oder entfernt wurden, wäre ideal ... aber ich bin mir nicht sicher, ob dies überhaupt möglich ist?

Jacob Dorman
quelle
Möchten Sie alle Datenänderungen oder nur Strukturänderungen versionieren? und das ist deine wahre GESCHÄFTSAUFGABE?
Lazy Badger
Wenn Sie Änderungen an CMS wie WordPress vornehmen, gibt es häufig Änderungen an Inhalt und Konfiguration (DB-Daten) sowie Änderungen an Logik (Code). Ich möchte beide versionieren können. Strukturänderungen wären ein guter Anfang ... GESCHÄFTSAUFGABE: Client fragt nach neuem Widget. Installieren Sie das Plugin auf dem Staging-Server, verpflichten Sie sich zum Repo -> Konfigurieren Sie das Plugin und fügen Sie Beispielinhalte hinzu -> ziehen Sie nach der Genehmigung Codeänderungen in die Produktion und nehmen Sie dann manuell dieselben Datenänderungen im Produktionsadministrator vor.
Jacob Dorman
1
@JacobDorman Ich versuche genau das gleiche Problem zu lösen. Hast du schon etwas ausgearbeitet? Nach einigen Recherchen denke ich, dass ein benutzerdefiniertes Plugin, das ein bestimmtes Update-Skript erstellt, in Ordnung ist (wahrscheinlich nur Konfigurationsänderungen wie installierte Plugins und Konfigurationsoptionen zu exportieren - und nicht unbedingt Beiträge, Kategorien und Inhalte im Allgemeinen). . Würde gerne hören, wenn Sie andere Ideen haben.
Víctor López García

Antworten:

4

Hier sind zwei mögliche Lösungen: Beide sind generische MySQL-Tools zur Versionskontrolle, können jedoch an Ihren Workflow angepasst werden:

dbv.php

Dieses Tool erstellt aus den in der Datenbank festgestellten Änderungen "Migrationen", bei denen es sich im Grunde um SQL-Skripte handelt. Diese Skripte werden in einem lokalen Verzeichnis gespeichert und können somit in Ihr aktuelles VCS (z. B. git) übernommen werden.

Es wird über eine PHP-Weboberfläche verwendet.

DBVC

Grundsätzlich ähnlich wie beim vorherigen Tool basiert dies auf einer Befehlszeilenschnittstelle. Es wird über eine JSON-Datei konfiguriert. Der Hauptunterschied besteht darin, dass die Migrationsdateien nicht automatisch generiert werden.

Es gibt ein anstehendes Problem, um dies mit dem vorherigen ähnlichen zu integrieren, also ist das etwas, wonach man suchen muss.

Wordpress Plugins

Einige Plugins, die bei der Erstellung eines wiederholbaren Workflows helfen könnten:

Víctor López García
quelle
dbvc sieht aus wie das Tool, nach dem ich gesucht habe. Vielen Dank!
Jacob Dorman
1
Ich bin froh, dass es geholfen hat. Ich habe gerade ein anderes interessantes Tool gefunden, das seit einiger Zeit nicht mehr aktualisiert wurde, aber es könnte sich lohnen, eine Beute zu machen unter: github.com/idler/MMP
Víctor López García
@JacobDorman Können Sie mit DBVC DB-Änderungen aus verschiedenen Umgebungen erfolgreich zusammenführen? Ich habe eine eigene Strategie entwickelt , aber erstellt DBVC die Aktualisierungsdateien oder müssen Sie zwischen SQL-Dumps so etwas wie mysqldiff verwenden ? Ich kann mir nicht vorstellen, dass dieses Tool nützlich ist, es sei denn, es hilft dabei, tatsächlich vergleichbare SQL-Unterschiede zu erzeugen, insbesondere INSERT-Anweisungsparameter in separaten Zeilen ... obwohl ich vermute, dass eine Datei bearbeitet werden könnte, um damit umzugehen ...
Spencer Williams
@SpencerWilliams Ich habe DBVC nicht verwendet (und mysqldiff nicht verwendet), aber der Versionskontrolle immer noch DB-Dumps hinzugefügt ... Ich sehe sie in den meisten Fällen nicht wirklich als zusammenführbar, aber eine andere Verwendung als unvergleichlich kann hilfreich sein Änderungen und Probleme.
Jacob Dorman
@ Victor Ich habe MMP ausgecheckt. Es werden Schemaänderungen vorgenommen, jedoch keine Datenunterschiede / Einfügungen.
David Silva Smith
2

Ich mache das auf MYSQL.

Es fügt alle Tabellenschemata und Daten in eine eigene Datei ein, sodass ich leicht sehen kann, was sich geändert hat.

Im Gegensatz zu den meisten anderen Lösungen in diesem Thread erhält diese Lösung die Daten, die für ein CMS wichtig sind.

Diese Lösung verwendet keine Tools, nur ein Befehlszeilenskript.

Bearbeiten: Ich fand, dass mein älterer Code einen Fehler hatte, bei dem die Importreihenfolge wichtig war. Das Entfernen der --compactFlagge behebt den Fehler.

for x in `mysql --skip-column-names -u root -ppassword dbname -e 'show tables;'`; do
     echo exporting $x
     mysqldump -u root -ppassword --skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset --extended-insert=FALSE --replace --skip-dump-date dbname $x > "./db/$x.sql"
done

Älterer Code

for x in `mysql --skip-column-names -u root -ppassword dbname -e 'show tables;'`; do
     mysqldump -u root -ppassword --compact --extended-insert=FALSE --replace dbname $x > "./db/$x.sql"
done

und hier erfahren Sie, wie Sie importieren

for x in `ls ./db/*.sql`; do
     echo importing $x
     mysql -pdbpassword dbname --force < $x
done
David Silva Smith
quelle