Datenbankmigration liquibase-CLI

1. Schmerzpunkte und Lösungen

Schmerzstellen:

In relationalen Datenbanken führen neue Anforderungen in mittelgroßen bis großen Projekten häufig zu Änderungen in der anfänglichen Datenbanktabellenstruktur des Projekts, was zu einer Reihe von Änderungen an der Datenbank oder zu Datenänderungen und anderen Datenbankinhalten führt, und diese Inhalte haben erlebte verschiedene Änderungen. Nach der Anhäufung von Projektmitgliedern und Zeit werden die Lesbarkeit, Rückverfolgbarkeit und Wartbarkeit extrem schlecht, was zu Situationen wie keiner Rückverfolgbarkeit der Quelle führt;

Ein weiterer Punkt ist, dass in der tatsächlichen Projektumgebung dasselbe Projekt normalerweise in eine lokale Entwicklungsumgebung, eine UAT-Umgebung, eine SIT-Umgebung, eine Vorproduktionsumgebung und eine Produktionsumgebung unterteilt ist. Wenn wir die Struktur oder die Daten der Datenbanktabelle ändern, ist die Datenbankversionsmigration nicht möglich Die Synchronisierung der neuesten Änderungen in der Datenbank nach dem Neustart des Projekts erfordert einen manuellen Eingriff, um nach Datenbankmigrationsdatensätzen zu suchen und eine manuelle Synchronisierung durchzuführen.

Lösung:

So wie Git zum Verwalten von Projektprojekten verwendet wird, werden auch Datenquellen versioniert, um eine überschaubare, nachvollziehbare, wartbare, automatisierte, besser lesbare und konsistente Versionsverwaltung für Datenquellen zu ermöglichen. Die derzeitige Mainstream-Methode besteht darin, die beiden Open-Source-Technologien Liquibase und Flyway zu verwenden, um den oben genannten Zweck zu erreichen.

2. Ähnlichkeiten und Unterschiede zwischen Liquibase und Flyway

Einführung

Einführung in Liquibase

Als 2006 eingeführtes Open-Source-Tool, das für die Datenbankmigration verwendet werden kann, basiert Liquibase auf den Konzepten von Changelog- und Changeset-Dateien. Diese Dateien können in SQL, XML, YAML und JSON geschrieben werden. Sie speichern Änderungen an der Datenbankstruktur, sodass sie auf jede andere Datenbankinstanz angewendet werden können. Liquibase bietet eine Open-Source-Version und eine kostenpflichtige Version mit mehr Funktionen.

Diagramm zum Funktionsprinzip von Liquibase:
Fügen Sie hier eine Bildbeschreibung ein

Einführung in Flyway

Flyway ist ein Open-Source-Datenbankmigrationstool der Redgate Company. Das Tool konzentriert sich eher auf die Einfachheit der Regeln als auf die umständliche Konfiguration. Eine kostenlose Open-Source-Version und eine kostenpflichtige Version mit mehr Funktionen sind ebenfalls verfügbar.

Gleicher Punkt

  • Sowohl Liquibase als auch Flyway bieten kostenpflichtige Versionen auf Basis von Open Source an, um erweiterte Funktionen bereitzustellen.

  • Bietet Befehlszeilentools für verschiedene Umgebungen (Windows, MacOS, Linux)

  • Beide unterstützen native traditionelle SQL-Skripte für die Datenbankmigration.

  • Gute Integration mit Java und einfache und schnelle Integration in Projekte

  • Beide unterstützen Maven- und Gradle-Plug-Ins für die Datenbankmigration.

  • Alle unterstützen gängige relationale Daten- und Cloud-Datenbanken wie MySQL, Oracle, H2, DB2, SQL Server, Postgres, MariaDB usw.

Unterschied

  • Flyway unterstützt nur die Verwendung von SQL, Liquibase unterstützt die Verwendung von XML, SQL, YAML, JSON
  • Die Rollback-Funktion von Flyway ist eine kostenpflichtige Funktion. Liquibase bietet ein Open-Source-Rollback auf Änderungsprotokollebene, aber auch ein detaillierteres Rollback von Änderungssätzen ist eine kostenpflichtige Funktion.
  • Flyway generiert eine Flyway_schema_history (Standard) in der entsprechenden Datenquelle, um den Datenbankmigrationsdatensatz aufzuzeichnen. Liquibase generiert zwei Tabellen, Databasechangelog (Datenbankmigrationsprotokoll) und DatabaseChangeloglock (Datenbankmigrationssperre), in der entsprechenden Datenquelle. Die Datenbankmigration von LIquibase Die Tabelle stellt sicher, dass nur ein Datenbankänderungsprotokoll gleichzeitig ausgeführt wird, wodurch das Problem gelöst wird, dass mehrere Dienste dasselbe Datenbankmigrationsskript ausführen.

Material

Version 4.13, veröffentlicht am 27. Mai 2022, teilt hauptsächlich die JAR-Dateien liquibase-core und liquibase-commercial auf und wird die kostenpflichtige professionelle Version sowie einige Aktualisierungen der Datenbanktreiber betreffen.

3. Installation des Befehlszeilentools

Erfordern

Abhängig von der Java-Umgebung, Java11 wird empfohlen, Java8 kann ebenfalls verwendet werden. Bei Verwendung des liquibase-Installationsprogramms ist die Java-Umgebung standardmäßig enthalten.

Installieren Sie das Liquibase-Befehlszeilentool unter Windows

  • Laden Sie das Windows-Installationspaket herunter

Klicken Sie auf mich, um die exe-Datei automatisch herunterzuladenOder suchen Sie das Windows-Installationspaket auf Github und laden Sie es selbst herunter.

[Die Übertragung des externen Link-Bildes ist fehlgeschlagen. Die Quellseite verfügt möglicherweise über einen Anti-Leeching-Mechanismus. Es wird empfohlen, das Bild zu speichern und direkt hochzuladen (img-ZfuhIyBj-1659262067086) (D:\article\images\liquibase\download.png )]

Anleitung herunterladen:

Paketnamen veranschaulichen
liquibase-.tar.gz Linux
liquibase-.zip Linux
liquibase-windows-x64-installer-.exe Windows-Installationsumgebung
liquibase-macos-installer-.dmg MacOS-Installationspaket
liquibase-core-.jar Base Liquibase-Bibliothek (Open Source
liquibase-commerical-.jar Zusätzliche Business-Funktionen
liquibase-additional-.zip Andere Bibliotheken wie liquibase-maven-plugin.jar und liquibase-cdi.jar, Javadocs für alle Bibliotheken, ASC/MD5/SHA1-verifizierte Hashes für alle Dateien
liquibase-core-.jar enthält nur eine Open-Source-Lizenz. Wenn Sie Liquibase Pro oder ein anderes kommerzielles Plugin verwenden, müssen Sie auch liquibase-commercial-.jar installieren.
  • Doppelklicken Sie auf die heruntergeladene exe-Datei, um das Verzeichnis für die Installation auszuwählen. Konfigurieren und aktivieren Sie gleichzeitig das Hinzufügen von Umgebungsvariablen, damit diese in der Konsole verwendet werden können.

  • Geben Sie zur Überprüfung den folgenden Befehl ein:

    liquibase --version
    

    Wenn das Liquibase-Banner, die Versionsnummer, JRE und andere Informationen angezeigt werden, ist die Installation erfolgreich.

$ liquibase --version
####################################################
##   _     _             _ _                      ##
##  | |   (_)           (_) |                     ##
##  | |    _  __ _ _   _ _| |__   __ _ ___  ___   ##
##  | |   | |/ _` | | | | | '_ \ / _` / __|/ _ \  ##
##  | |___| | (_| | |_| | | |_) | (_| \__ \  __/  ##
##  \_____/_|\__, |\__,_|_|_.__/ \__,_|___/\___|  ##
##              | |                               ##
##              |_|                               ##
##                                                ##
##  Get documentation at docs.liquibase.com       ##
##  Get certified courses at learn.liquibase.com  ##
##  Free schema change activity reports at        ##
##      https://hub.liquibase.com                 ##
##                                                ##
####################################################
Starting Liquibase at 14:12:52 (version 4.14.0 #3667 built at 2022-07-22 18:36+0000)
Liquibase Home: D:\dev\database-command\liquibase
Java Home D:\dev\jdk1.8.0_20\jre (Version 1.8.0_20)
Libraries:
- internal\lib\commons-collections4.jar: Apache Commons Collections 4.4.0 By The Apache Software Foundation
- internal\lib\commons-lang3.jar: Apache Commons Lang 3.12.0 By The Apache Software Foundation
- internal\lib\commons-text.jar: Apache Commons Text 1.9.0 By The Apache Software Foundation
- internal\lib\connector-api.jar: J2EE Connector Architecture API Specification 1.5 By Sun Microsystems, Inc.
- internal\lib\h2.jar: H2 Database Engine 2.1.214 By H2 Group
- internal\lib\hsqldb.jar: HSQLDB 2.5.2 By The HSQL Development Group
- internal\lib\jaxb-api.jar: jaxb-api 2.3.1 By Oracle Corporation
- internal\lib\jaxb-core.jar: JAXB Core 4.0.0 By Eclipse Foundation
- internal\lib\jaxb-runtime.jar: JAXB Runtime 4.0.0 By Eclipse Foundation
- internal\lib\jaybird.jar: Jaybird 4.0.6.java8 (build: variant=jaybird tag=v4.0.6 date=202204271624) By Firebird project
- internal\lib\jcc.jar: IBM JCC JDBC 4 Driver 1.4.0 By IBM
- internal\lib\liquibase-commercial.jar: Commercial Liquibase Functionality 4.14.0 By Liquibase
- internal\lib\mariadb-java-client.jar: mariadb-java-client 3.0.6 By mariadb.com
- internal\lib\mssql-jdbc.jar: Microsoft JDBC Driver for SQL Server 10.2.1 By Microsoft Corporation
- internal\lib\ojdbc8.jar: JDBC 21.6.0.0.1 By Oracle Corporation
- internal\lib\opencsv.jar: opencsv 5.6.0
- internal\lib\picocli.jar: picocli 4.6.3 By Remko Popma
- internal\lib\postgresql.jar: PostgreSQL JDBC Driver 42.4.0 By PostgreSQL Global Development Group
- internal\lib\snakeyaml.jar: SnakeYAML 1.30.0
- internal\lib\snowflake-jdbc.jar: snowflake-jdbc 3.13.20
- internal\lib\sqlite-jdbc.jar: SQLite JDBC 3.36.0.3

Liquibase Version: 4.14.0
Liquibase Community 4.14.0 by Liquibase

Installation unter Linux

  • Installieren

Laden Sie das Linux-Installationspaket von Github herunter und laden Sie es über das SFTP-Tool auf den Linux-Dienst hoch.

Download-Adresse der Linux-Umgebung

  • Entpacken

Erstellen Sie eine Liquibase-Datei, um die von Liquibase dekomprimierten Dateien zu speichern.

tar -zxvf liquibase-4.13.0.tar.gz
  • Umgebungsvariablen konfigurieren
export PATH=$PATH:/home/devops/tools/liquibase

/home/devops/tools/liquibase Der Pfad muss in Ihren eigenen Dekomprimierungspfad geändert werden. Führen Sie den obigen Befehl direkt im Befehl aus. Die Umgebungsvariable liquibase ist temporär. Nach dem Schließen der Verbindung ist die Umgebungsvariable liquibase ungültig. Fügen Sie Liquibase-Umgebungsvariablen in **/etc/profile** hinzu

vi /etc/profile

Geben Sie i ein, um in den Bearbeitungsmodus zu gelangen, fügen Sie die obige Konfiguration am Ende der Datei hinzu, verlassen Sie den Eingabemodus und speichern Sie.

Aktivieren Sie nach dem Hinzufügen der Umgebungsvariablen die Konfigurationsdatei erneut:

source /etc/profile
  • Versionsnummer anzeigen
liquibase --version

Offizielle Beispielverwendung (H2)

Das offizielle CLI-Befehlszeilentoolpaket enthält ein Beispiel für die Verwendung von SQL, XML, XML und JSON zur Verwaltung der H2-Datenbank, das im Installationspaket zu finden istBeispiele< gefunden in a i=2>.

  • Führen Sie den Befehl im Liquibase-Dekomprimierungsverzeichnis aus (oder suchen Sie das Beispielverzeichnis im Dekomprimierungsverzeichnis und führen Sie die Skripte strat-h2.bat (Windows-Umgebung) oder start-h2 (Linux-Umgebung) aus):
liquibase init start-h2

Fügen Sie hier eine Bildbeschreibung ein

  • Nach erfolgreicher Ausführung wird die H2-Datenbankverwaltungsseite auf dem lokalen Port 8080 geöffnet.
    Fügen Sie hier eine Bildbeschreibung ein

  • Verwenden Sie native traditionelle SQL-Skripte für die Datenbankmigration

Das obige H2-Verwaltungsfenster kann nicht geschlossen werden. Öffnen Sie ein neues Terminal und geben Sie das Verzeichnisexamples\sql ein

Führen Sie den Datenänderungsvorgang im Beispiel durch und erstellen Sie neue Tabellen COMPANY und PERSON in der H2-Datenbank.

liquibase update

Ob während der Ausführung eine Verbindung zur liquibaseHub-Eingabe hergestellt werden sollS wird übersprungen. Die Ausführungsergebnisse lauten wie folgt:
Fügen Sie hier eine Bildbeschreibung ein
Aktualisieren in Auf der im Browser geöffneten H2-Datenbankverwaltungsseite sind 4 weitere Tabellen sichtbar
Fügen Sie hier eine Bildbeschreibung ein

Tabellenname veranschaulichen
PERSION Führen Sie Datenbankänderungen durch, um neue Tabellen hinzuzufügen
UNTERNEHMEN Führen Sie Datenbankänderungen durch, um neue Tabellen hinzuzufügen
DATABASECHANGELOG Liquibase zeichnet die Protokolltabelle der Datenmigrationsdatensätze auf
DATABASECHANGELOGLOCK Liquibase verhindert, dass die Sperrtabelle gleichzeitig mit demselben Dienst dieselbe Änderung ausführt (wodurch sichergestellt wird, dass nur eine Änderung ausgeführt wird).

Anweisungen zur Tabellenerstellung PERSON und COMPANY finden Sie im example-changelog in \examples\sql . sqlfind

Fügen Sie hier eine Bildbeschreibung ein
Wenn Sie XML, YAML oder JSON zum Testen verwenden möchten, geben Sie einfach das entsprechende Verzeichnis ein und führen Sie das Liquibase-Update aus (beachten Sie das Problem der wiederholten Tabellenerstellung).

Beschreibung des Liquibase SQL-Dateiformats

Es wird empfohlen, für Datenbankänderungen SQL-Formatdateien zu verwenden, da SQL näher am Projekt liegt und die Kosten für die Verwendung von Liquibase im Projekt geringer sind. Gleichzeitig besteht keine Notwendigkeit, einen separaten Satz von Datenbankänderungsdateien zu verwalten in den Formaten XML, YAML und JSON, und es ist nicht erforderlich, Liquibase zu erlernen, um XML zum Verwalten der Datenbank zu verwenden. Versions-Tag-Syntax. Um eine SQL-Datei zu verwenden, müssen Sie lediglich SQL-Anmerkungen hinzufügen. Eine einfache und standardmäßige SQL-Datei für die Liquibase-Verwaltungsdatenbank lautet wie folgt:

--liquibase formatted sql
--changeset <author name>:<a unique identifier for the SQL changeset>
<SQL statements go here>
<SQL statements go here>
--rollback <rollback SQL statements>
--rollback <rollback SQL statements>
--changeset <author name>:<another unique identifier>
<SQL statements go here>
<SQL statements go here>
--rollback <rollback SQL statements>
--rollback <rollback SQL statements>

–liquibase-formatiertes SQL: liquibase identifiziert, ob die SQL eine Liquibase-Standard-SQL-Datei ist und geschrieben werden muss
–changeset-Autorname>:< ;ein eindeutiger Bezeichner für den SQL-Änderungssatz Änderungssatz: Geben Sie den Autor und die eindeutige Nummer des Änderungssatzes ein (Zeitstempel + Anforderungsnummer wird empfohlen). Beispiel: root:1659256095-M0001-001< /span> Rollback: So führen Sie ein Rollback durch, wenn die ausgeführte SQL zurückgesetzt werden muss. Es wird empfohlen, nach jedem Vorgang Rollback-SQL hinzuzufügen
–rollback

Ein einfaches Beispiel ist wie folgt:

--liquibase formatted sql
--changeset zlc:20220102_CREATE_TABLE_USERTEST
CREATE TABLE `user_test` (
  `id` int NOT NULL COMMENT '主键',
  `username` varchar(128) DEFAULT NULL COMMENT '用户名',
  `password` varchar(127) DEFAULT NULL COMMENT '密码',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户';
--rollback DROP TABLE user_test

An diesem Punkt ist die Einstiegsnutzung von Liquibase abgeschlossen. Später werden wir vorstellen, wie man Maven und das Gradle-Plug-in verwendet und in das Projekt integriert. Der Artikel wird in Zukunft hier verlinkt. Also bleibt gespannt!
te_time datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='User';
–rollback DROP TABLE user_test


至此,liquibase的入门级使用就完成了,后续会介绍如何使用Maven、Gradle插件以及融合进项目中使用,后续会将文章链接在此,敬请期待!

Supongo que te gusta

Origin blog.csdn.net/chen15369337607/article/details/126088636
Recomendado
Clasificación