So vergleichen Sie zwei Datenbanktabellenstrukturen in MySQL

So vergleichen Sie zwei Datenbanktabellenstrukturen in MySQL

Während des Entwicklungs- und Debugging-Prozesses ist es notwendig, die Unterschiede zwischen dem neuen und dem alten Code zu vergleichen. Zum Vergleich können wir Versionskontrolltools wie git/svn verwenden. Es gibt auch Unterschiede in den Datenbanktabellenstrukturen verschiedener Versionen. Wir müssen auch die Unterschiede vergleichen und die SQL-Anweisungen zum Aktualisieren der Struktur abrufen.

Beispielsweise funktioniert derselbe Codesatz in der Entwicklungsumgebung normal, weist jedoch in der Testumgebung Probleme auf. In diesem Fall müssen Sie neben der Überprüfung der Servereinstellungen auch vergleichen, ob es Unterschiede in den Datenbanktabellenstrukturen zwischen der Entwicklungsumgebung und der Testumgebung gibt. Nachdem Sie die Unterschiede gefunden haben, müssen Sie die Datenbanktabellenstruktur der Testumgebung aktualisieren, bis die Datenbanktabellenstrukturen der Entwicklungs- und Testumgebung konsistent sind.

Wir können das Tool mysqldiff verwenden, um die Datenbanktabellenstruktur zu vergleichen und die SQL-Anweisung zum Aktualisieren der Struktur zu erhalten.

1.mysqldiff-Installationsmethode

Das Tool mysqldiff befindet sich im Paket mysql-utilities. Für die Ausführung von mysql-utilities ist die Installation der Abhängigkeit mysql-connector-python erforderlich.

mysql-connector-python-installation

Download-Adresse: https://dev.mysql.com/downloads/connector/python/

MySQL-Dienstprogramme installieren

Download-Adresse: https://downloads.mysql.com/archives/utilities/

Da ich ein Mac-System verwende, kann ich es direkt mit Brew installieren.

brew installiere caskroom/cask/mysql-connector-python
brew install caskroom/cask/mysql-utilities

Führen Sie nach der Installation den Befehl aus, um die Version anzuzeigen. Wenn die Version angezeigt wird, bedeutet dies, dass die Installation erfolgreich war.

mysqldiff --version
MySQL-Dienstprogramme mysqldiff Version 1.6.5 
Lizenztyp: GPLv2

2. So verwenden Sie mysqldiff

Befehl:

mysqldiff --server1=root@host1 --server2=root@host2 --difftype=sql db1.table1:dbx.table3

Parameterbeschreibung:

--server1 gibt Datenbank 1 an
--server2 gibt Datenbank 2 an

Der Vergleich kann für eine einzelne Datenbank durchgeführt werden. Durch Angabe nur der Option „server1“ können verschiedene Tabellenstrukturen in derselben Datenbank verglichen werden.

--difftype zeigt Informationen zu Unterschieden an

vereinheitlicht (Standard)
Anzeige der Ausgabe im einheitlichen Format

Kontext
Ausgabe im Anzeigekontextformat

abweichen
Ausgabe in verschiedenen Formaten anzeigen

SQL-Befehle
Ausgabe der SQL-Konvertierungsanweisung anzeigen

Wenn Sie SQL-Konvertierungsanweisungen erhalten möchten, ist der SQL-Anzeigemodus am besten geeignet.

--character-set gibt den Zeichensatz an

--changes-for wird verwendet, um das zu konvertierende Objekt anzugeben, d. h. die Richtung, in der Unterschiede generiert werden. Der Standardwert ist server1

--changes-for=server1 bedeutet, dass Server1 in Server2 konvertiert wird, wobei Server2 der primäre Server ist.

--changes-for=server2 bedeutet, dass Server2 in die Struktur von Server1 konvertiert wird, wobei Server1 der primäre Server ist.

--skip-table-options Unterschiede in AUTO_INCREMENT, ENGINE, CHARSET ignorieren.

--version Version anzeigen

Weitere Informationen zur Verwendung von mysqldiff-Parametern finden Sie in der offiziellen Dokumentation:
https://dev.mysql.com/doc/mysql-utilities/1.5/en/mysqldiff.html

3. Beispiele

Erstellen von Testdatenbanktabellen und -daten

Datenbank Testa erstellen;
Datenbank testb erstellen;

Testa verwenden;

TABELLE ERSTELLEN `tba` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(25) NICHT NULL,
 `Alter` int(10) unsigned NOT NULL,
 `addtime` int(10) unsigned NICHT NULL,
 PRIMÄRSCHLÜSSEL (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8;

einfügen in `tba`(Name, Alter, Addtime) Werte('fdipzone', 18,1514089188);

verwende testb;

TABELLE ERSTELLEN `tbb` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(20) NICHT NULL,
 `Alter` int(10) NICHT NULL,
 `addtime` int(10) NICHT NULL,
 PRIMÄRSCHLÜSSEL (`id`)
)ENGINE=InnoDB STANDARD-CHARSET=utf8;

einfügen in `tbb`(Name, Alter, Addtime) Werte('fdipzone', 19,1514089188);

Führen Sie einen Differenzvergleich durch, legen Sie Server1 als Hauptserver fest und Server2 sollte in die Datenbanktabellenstruktur von Server1 konvertiert werden

mysqldiff --server1=root@localhost --server2=root@localhost --changes-for=server2 --difftype=sql testa.tba:testb.tbb;
# Server1 auf lokalem Host: ... verbunden.
# Server2 auf lokalem Host: ... verbunden.
# Vergleiche testa.tba mit testb.tbb [FEHLER]
# Transformation für --changes-for=server2:
#

ALTER TABLE `testb`.`tbb` 
 ÄNDERN SPALTE addtime addtime int(10) unsigned NOT NULL, 
 ÄNDERN SPALTE Alter Alter int(10) unsigned NOT NULL, 
 ÄNDERN SPALTE name name varchar(25) NICHT NULL, 
UMBENENNEN IN testa.tba 
, AUTO_INCREMENT=1002;

# Vergleich fehlgeschlagen. Ein oder mehrere Unterschiede gefunden.

Führen Sie die von mysqldiff zurückgegebene Update-SQL-Anweisung aus.

mysql> ALTER TABLE `testb`.`tbb` 
  -> ÄNDERN SPALTE addtime addtime int(10) unsigned NOT NULL, 
  -> ÄNDERN SPALTE Alter Alter int(10) unsigned NOT NULL, 
  -> SPALTE ÄNDERN Name Name varchar(25) NICHT NULL;
Abfrage OK, 0 Zeilen betroffen (0,03 Sek.)

Führen Sie mysqldiff erneut aus, um zu vergleichen. Es gibt keinen Unterschied in der Struktur, nur AUTO_INCREMENT ist anders.

mysqldiff --server1=root@localhost --server2=root@localhost --changes-for=server2 --difftype=sql testa.tba:testb.tbb;
# Server1 auf lokalem Host: ... verbunden.
# Server2 auf lokalem Host: ... verbunden.
# Vergleiche testa.tba mit testb.tbb [FEHLER]
# Transformation für --changes-for=server2:
#

ALTER TABLE `testb`.`tbb` 
UMBENENNEN IN testa.tba 
, AUTO_INCREMENT=1002;

# Vergleich fehlgeschlagen. Ein oder mehrere Unterschiede gefunden.

Stellen Sie AUTO_INCREMENT so ein, dass es ignoriert wird, und vergleichen Sie dann die Unterschiede. Der Vergleich ist erfolgreich.

mysqldiff --server1=root@localhost --server2=root@localhost --changes-for=server2 --skip-table-options --difftype=sql testa.tba:testb.tbb;
# Server1 auf lokalem Host: ... verbunden.
# Server2 auf lokalem Host: ... verbunden.
# Vergleiche testa.tba mit testb.tbb [PASS]
# Erfolg. Alle Objekte sind gleich.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Beispielcode für die SQL-Vergleichsmethode für mehrere Tabellen und Felder

<<:  JavaScript implementiert die Verarbeitung großer Datei-Uploads

>>:  Detailliertes Tutorial zur Nginx-Installation

Artikel empfehlen

So testen Sie die Netzwerkgeschwindigkeit mit JavaScript

Inhaltsverzeichnis Vorwort Zusammenfassung des Pr...

Detaillierte Erklärung zur JavaScript-Datenabflachung

Inhaltsverzeichnis Was ist Abflachung? Rekursion ...

Detaillierte Schritte zur Installation von Python 3.7 auf CentOS 6.5

1. Python 3 herunterladen wget https://www.python...

Die CSS-Priorität der Webseite wird für Sie ausführlich erklärt

Bevor wir über die CSS-Priorität sprechen, müssen...

Freundliche Alternativen zum Find Tool in Linux

Mit dem Befehl „Find“ können Sie in einem angegeb...

Detaillierte Erklärung des wunderbaren CSS-Attributs MASK

Dieser Artikel stellt eine sehr interessante Attr...

Eine kurze Analyse von MySQL-Sperren und -Transaktionen

MySQL selbst wurde auf Basis des Dateisystems ent...

Beispiel für die Konfiguration der Timeout-Einstellung für MySQL-Datenbanken

Inhaltsverzeichnis Vorwort 1. JDBC-Timeout-Einste...