MySql-Entwicklung einer automatischen Synchronisierungstabellenstruktur

MySql-Entwicklung einer automatischen Synchronisierungstabellenstruktur

Schwachstellen bei der Entwicklung

Während des Entwicklungsprozesses sind die Datenbanktabellen in den RD- und QA-Umgebungen aufgrund häufiger Änderungen an Datenbankfeldern oft inkonsistent.

Da diese Datenbankänderungsvorgänge jedoch von mehreren RDs durchgeführt werden können, ist es schwierig, sie alle auf einmal zu erfassen. Das manuelle Überprüfen der Felder in der QA-Umgebung ist sehr mühsam und kann leicht übersehen werden.

Lösung

Also habe ich ein Programm geschrieben, das automatisch die Tabellenstrukturen zweier Datenbanken vergleichen und ALTER-Anweisungen generieren kann. Es kann auch so konfiguriert werden, dass diese ALTER-Anweisungen automatisch ausgeführt werden. Weitere Einzelheiten finden Sie auf GitHub.

Prinzip

Synchronisieren Sie die neu hinzugefügte Tabelle

Wenn in der RD-Umgebung eine neue Tabelle hinzugefügt wird, aber nicht in der QA-Umgebung, kann dieses Programm die Anweisung „Tabelle erstellen“ direkt ausgeben. Und so funktioniert es:

Die hauptsächlich verwendeten SQL sind:

Tabelle von rd_db anzeigen;
Tabelle anzeigen, erstellen, hinzugefügter_Tabellenname;

Struktur der Synchronisationstabelle

Wenn die Struktur der rd-Tabelle geändert wurde, die qa-Umgebung jedoch nicht, kann dieses Programm die alter-Anweisung direkt ausgeben. Das Prinzip ist wie folgt:

Die verwendeten SQL-Typen sind:

wählen 
 SPALTENNAME, SPALTENTYP, IS_NULLABLE, SPALTENSTANDARD, SPALTENKOMMENTAR, EXTRA 
aus 
 information_schema.columns
Wo 
  TABLE_SCHEMA='rd_db'
  und TABLE_NAME = 'rd_table';

Code zum Vergleichen von Tabellenstrukturen:

        für (Spalte Spalte: sourceTable.getColumns().values()) {
            wenn (targetTable.getColumns().get(column.getName()) == null) {
                // Wenn das entsprechende Ziel dieses Feld nicht hat, ändern Sie es direkt
                String sql = "Tabelle ändern " + target.getSchema() + "." + targetTable.getTableName() + " hinzufügen " + Spalte
                        .getName() + " ";
                sql += Spalte.getType() + " ";
                wenn (Spalte.getIsNull().equals("NEIN")) {
                    sql += "NICHT NULL ";
                } anders {
                    sql += "NULL";
                }
                wenn (Spalte.getDefaultValue() != null) {
                    sql += "DEFAULT " + SqlUtil.getDbString(column.getDefaultValue()) + " ";
                }
                if (column.getComment() != null) {
                    sql += "KOMMENTAR " + SqlUtil.getDbString(column.getComment()) + " ";
                }
                wenn (nach != null) {
                    sql += "nach " + nach;
                }
                ändereSql.add(sql+";");
            } anders {
                //Überprüfen Sie die entsprechenden Quell- und Zielattribute String sql =
                        "Tabelle ändern " + target.getSchema() + "." + targetTable.getTableName() + " ändern " + Spalte
                                .getName() + " ";
                Spalte Quellspalte = Spalte;
                Spalte Zielspalte = Zieltabelle.getColumns().get(Quellspalte.getName());
                // Vergleichen Sie die beiden Felder. Wenn null zurückgegeben wird, weist dies auf Konsistenz hin. String sqlExtend = compareSingleColumn(sourceColumn, targetColumn);
                if (sqlExtend != null) {
                    changeSql.add(sql + sqlExtend+";");
                }
            }
            nach = Spalte.getName();
        }

Indexstruktur synchronisieren

Wenn sich der Index der rd-Tabelle geändert hat, die QA-Umgebung jedoch nicht, kann dieses Programm die Anweisung zur Indexänderung direkt ausgeben. Das Prinzip ist dem oben genannten ähnlich und wird hier nicht wiederholt.

Konfiguration

sourceHost=127.0.0.1:3306
Quellbenutzer=root
Quellpasswort = 123123123
Quellschema = mystique_db
Quellzeichensatz = utf8

Zielhost = 127.0.0.1:3306
Zielbenutzer=root
ZielPass=123123123
Zielschema = Mystique_Test
ZielZeichensatz=utf8

autoExecute=YES //Dies zeigt die automatische Synchronisierung an

laufen

Konfigurieren Sie gemäß der obigen Vorlage und öffnen Sie sie mit IDE. Finden Sie

alchemystar.runner.ShellRunner 

Führen Sie einfach die Hauptmethode aus

Generierte Effektanzeige

alter table mystique_test.t_test_3 change id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT ''
Tabelle mystique_test.t_test_3 ändern, Index hinzufügen (Name)
alter table mystique_test.t_test_3 drop index name_id
alter table mystique_test.t_test_3 add id_2 varchar(50) NULL DEFAULT '' COMMENT '' nach Name

Wenn die automatische Ausführung eingeschaltet ist, werden diese Anweisungen automatisch ausgeführt

GitHub-Link

https://github.com/alchemystar/Lancer

Code Cloud-Link

https://git.oschina.net/alchemystar/Lancer

Zusammenfassen

Dies ist das Ende dieses Artikels über MySql-Entwicklung und automatische Synchronisierung der Tabellenstruktur. Weitere relevante Inhalte zur automatischen Synchronisierung der Tabellenstruktur von MySql finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • MySQL realisiert die Synchronisierung von Daten zwischen zwei Tabellen
  • Detaillierte Erläuterung des Implementierungsprozesses der Dual-Master-Synchronisierung von Teiltabellen in MySQL 5.7

<<:  Ein Artikel, der Ihnen HTML beibringt

>>:  Erfahren Sie in einem Artikel, wie Sie mehrere Tomcats bereitstellen und starten und Projekte migrieren

Artikel empfehlen

Installieren Sie MySQL 5.6 aus der Yum-Quelle im Centos7.4-System

Systemumgebung: centos7.4 1. Prüfen Sie, ob die D...

Detaillierte Erklärung zur Verwendung von MySQL DML-Anweisungen

Vorwort: Im vorherigen Artikel haben wir hauptsäc...

Über IE8-Kompatibilität: Erklärung des X-UA-Compatible-Attributs

Problembeschreibung: Code kopieren Der Code laute...

So verwandeln Sie ein JAR-Paket in einen Docker-Container

So verwandeln Sie ein JAR-Paket in einen Docker-C...

Lösung für das Problem „VMware-virtuelle Maschine ohne Netzwerk“

Inhaltsverzeichnis 1. Problembeschreibung 2. Prob...

Eine kurze Analyse der Unterschiede zwischen px, rem, em, vh und vw in CSS

Absolute Länge px px ist der Pixelwert, also eine...

Sieben Prinzipien eines guten Designers (2): Farbgebrauch

<br />Vorheriger Artikel: Sieben Prinzipien ...

Detaillierte Analyse der MySQL-Indizes

Vorwort Wir wissen, dass die Indexauswahl Aufgabe...

Verwendung des Linux-Befehls xargs

1. Funktion: xargs kann die durch Leerzeichen ode...

JavaScript-Selektorfunktionen querySelector und querySelectorAll

Inhaltsverzeichnis 1. querySelector fragt ein ein...