Eine Person, die MySQL Workbench verwendet, um eine DB-Tabelle zu definieren (ER-Diagrammerstellung)
Jemand, der MWB-Dateien unter Versionskontrolle hält, aber die Unterschiede nicht erkennen kann (weil es binär ist)
Jemand, der hart daran arbeitet, die interne XML zu analysieren, um mwb als Text zu behandeln
Angenommen, Sie erstellen eine "Benutzer" -Tabelle wie unten gezeigt, speichern sie in der Datei "app.mwb" und führen "git add", "git commit" aus.
Nun, dann ging die Entwicklung weiter und wir beschlossen, eine "Artikel" -Tabelle hinzuzufügen.
Angenommen, Sie überschreiben app.mwb
mit git commit -u
.
Was sehen Sie nun, wenn Sie sich nach einer Weile dieses Festschreibungsprotokoll ansehen? Möglicherweise sehen Sie den Unterschied, wenn Sie die Dateien bei beiden Revisionen abrufen und den Inhalt in Workbench überprüfen. In der Regel ist der Unterschied zwischen den Textdateien jedoch nur leicht zu erkennen. (Es wäre schön, wenn es ein MWB-Diff wie das Bilddiff auf Github gäbe, aber im Moment scheint es so etwas nicht zu geben.)
Es ist möglich, die mwb-Datei selbst (eigentlich eine XML-Datei mit Zip-Packung) zu analysieren, um die internen Tabellendefinitionen abzurufen, aber MySQL Workbench verfügt tatsächlich über eine Lua-Python-Skriptschnittstelle. Dieses Mal werden wir dies verwenden, um mwb → sql zu konvertieren. Danach scheint es gut, zum Zeitpunkt von "git commit" zu haken und die SQL-Datei automatisch unter Versionskontrolle zu stellen. Bitte legen Sie fest, wie Sie mit dem Versionsverwaltungssystem umgehen sollen.
In der ersten Ausgabe möchte ich das X WIndow-System nicht nur für die Verwendung von MySQL Workbench einbinden, daher verwende ich den virtuellen Xvfb-Frame-Puffer. (Bei Windows wird der Bildschirm für einen Moment angezeigt, aber wir geben auf.) In Bezug auf die zweite habe ich es geschafft, während ich mir den Code von MySQL Workbench selbst angesehen habe, daher kann ich nicht garantieren, dass er wirklich korrekt ist. In Bezug auf die dritte Anweisung können Sie beispielsweise steuern, ob eine DROP TABLE-Anweisung über die GUI hinzugefügt werden soll oder nicht. Derzeit wissen wir jedoch nicht, wie sie über ein Skript ausgeführt werden soll. Diesmal besteht der Zweck jedoch darin, den Unterschied in Text umzuwandeln und leicht zu überprüfen, sodass es nicht viel ausmacht.
Das folgende Repository enthält den erforderlichen Code, Beispiele und die Verwendung. Das Python-Skript ist ebenfalls in den Hauptteil mwb2sql.sh
eingebettet, passt aber tatsächlich in ungefähr 10 Zeilen.
https://github.com/tomoemon/mwb2sql
Windows (bestätigter Vorgang unter Windows 7)
Linux (bestätigter Betrieb unter Ubuntu12.04)
Hier erklären wir, wie man es unter Linux ausführt, ohne die GUI anzuzeigen. Für Windows ist dies einfacher. Weitere Informationen finden Sie in der README-Datei im obigen Repository.
Aktivieren Sie die virtuelle Anzeige in Xvfb. Wenn Sie Xvfb starten, erhalten Sie möglicherweise eine Nachricht über die Schriftart, aber das ist mir egal.
$ Xvfb :1 &
[dix] Could not init font path element /usr/share/fonts/X11/cyrillic, removing from list!
Starten Sie in diesem Zustand MySQL Workbench mit einem virtuellen Frame-Puffer von 1: 1. Das Python-Skript zum Speichern des Modells ist in "mwb2sql.sh" geschrieben. Wenn Sie es also wie folgt starten, enthält "a.sql" alle in "test.mwb" definierten Schemata. Die Anweisung CREATE für die Tabelle wird gedruckt.
$ DISPLAY=:1 sh mwb2sql.sh test.mwb a.sql
Da es einen virtuellen Frame-Puffer verwendet, sollte es auch dann gut funktionieren, wenn es über ssh verbunden ist.
Der folgende Inhalt wird an "a.sql" ausgegeben.
python
-- ----------------------------------------------------------------------------
-- MySQL Workbench Migration
-- Migrated Schemata: mydb
-- Source Schemata:
-- Created: Thu Aug 01 02:32:15 2013
-- ----------------------------------------------------------------------------
SET FOREIGN_KEY_CHECKS = 0;;
-- ----------------------------------------------------------------------------
-- Schema mydb
-- ----------------------------------------------------------------------------
DROP SCHEMA IF EXISTS `mydb` ;
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
-- ----------------------------------------------------------------------------
-- Table mydb.table1
-- ----------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`table1` (
`id` INT NOT NULL ,
`name` VARCHAR(45) NULL ,
`created` DATETIME NULL ,
`updated` DATETIME NULL ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
SET FOREIGN_KEY_CHECKS = 1;;
Zum Schluss kombinieren wir dieses Skript mit Git Hook, um automatisch eine SQL-Textdatei festzuschreiben. Fügen Sie die Datei "git_pre-commit" als ".git / hooks / pre-commit" des Repositorys, das Sie derzeit für die Entwicklung verwenden, in das Repository ein.
Exportieren Sie die DISPLAY-Spezifikation, da es keine Spezifikation für die Verwendung des virtuellen Frame-Puffers im Hook-Skript gibt. Sie können das Hook-Skript neu schreiben.
$ export DISPLAY=:1
Versuchen Sie in diesem Zustand "git add", "git commit" eine beliebige MWB-Datei im zu entwickelnden Repository. Eine Datei wie test.mwb .__ auto_generated __. Sql
sollte erstellt und automatisch festgeschrieben werden. In diesem Fall handelt es sich um einen clientseitigen Hook, den Sie jedoch als serverseitigen Hook verwenden können.
Es ist viel stabiler als zuvor, aber es ist immer noch wahrscheinlicher, dass es mit ein wenig Bedienung fällt **, daher empfehle ich es nicht als Werkzeug nur zum Zeichnen von Diagrammen. Es gibt jedoch viele Funktionen, die nur für Workbench gelten, z. B. die Synchronisierung der tatsächlichen Tabelle auf dem DB-Server mit dem Modell auf mwb und die Berücksichtigung des Unterschieds. Wenn Sie also Workbench verwenden, wird empfohlen, diese Funktionen ebenfalls zu verwenden. Machen.
Recommended Posts