So automatisieren Sie MySQL-Datenbankmigrationen mit Skeema

0
191

Skeema ist ein Open-Source-CLI-Tool, mit dem Sie MySQL-Datenbankschemas synchronisieren können über mehrere Hosts. Es funktioniert mit einfachen SQL-Dateien, die CREATE TABLE-Anweisungen enthalten.

Datenbankmigrationen sind eine der häufigsten Herausforderungen im Softwareentwicklungsprozess. Wie versionieren Sie Ihr Schema und wenden Änderungen auf alle Ihre Umgebungen an?

Skeema hilft Ihnen, diesen Schwachpunkt zu verringern, indem Sie Ihr Schema als reguläres SQL verwalten können. Sie müssen keine spezielle Syntax oder kein Konfigurationsdateiformat lernen. Wenn Sie Ihr Schema auf einen Host übertragen, zieht Skeema die Definitionen der Tabellen auf diesem Host und vergleicht sie mit Ihren lokalen Dateien. Es berechnet dann die Anweisungen CREATE, ALTER und DROP, damit der Remote-Host mit Ihren SQL-Dateien übereinstimmt.

Sie müssen InnoDB-Tabellen verwenden, um das Beste aus Skeema herauszuholen. Es kann mit MyISAM-Tabellen arbeiten, aber nicht alle Funktionen werden unterstützt und es können Probleme auftreten.

Erste Schritte

Skeema ist für Linux und Mac verfügbar. Es werden DEB- und RPM-Pakete sowie vorgefertigte eigenständige Binärdateien angeboten. Holen Sie sich den entsprechenden Download für Ihr System und installieren Sie entweder das Paket oder extrahieren Sie die Binärdatei in ein Verzeichnis, das sich in Ihrem Pfad befindet.

Werbung

Der erste Schritt bei der Verwendung von Skeema besteht darin, das vorhandene Schema Ihrer Datenbank abzurufen. Wenn Sie bereits eine Sammlung von SQL-Dateien mit CREATE TABLE-Anweisungen haben, können Sie diese unverändert verwenden. Führen Sie andernfalls den Befehl skeema init aus, um die SQL zu erhalten, die eine Live-Datenbank darstellt.

Die CLI von Skeema akzeptiert dieselben Argumente wie der reguläre mysql-Befehl. Verwenden Sie die Flags -h, -u und -p, um Ihren MySQL-Host, Ihren Benutzernamen und Ihr Passwort anzugeben. Der MySQL-Benutzer sollte über Administratorzugriff auf Ihre Schemas verfügen; Andernfalls kann Skeema sie möglicherweise nicht überprüfen oder alle Änderungen anwenden. Skeema legt Ihre SQL-Dateien in einem neuen Verzeichnis innerhalb Ihres Arbeitsverzeichnisses ab; fügen Sie das Flag -d hinzu, um auszuwählen, wie dies genannt wird.

skeema init -h example.com -u root -p -d my-sql

Skeema exportiert standardmäßig die SQL für alle Schemas auf dem Host. Jedes Schema erhält ein eigenes Unterverzeichnis im my-sql-Ordner. Verwenden Sie das Flag –schema, um ein bestimmtes zu exportierendes Schema anzugeben. Es wird direkt in my-sql platziert, ohne Verschachtelung von Unterverzeichnissen.

Schemas synchronisieren

Sobald Sie Ihr SQL haben, können Sie es mit einem anderen Host synchronisieren. Verwenden Sie den Befehl skeema push, um Ihre lokale SQL mit einem anderen MySQL-Server abzugleichen. Skeema wendet automatisch alle erkannten Änderungen an.

cd my-sql skeema push -h example.com -u root -p -d my-sql

Versuchen Sie, eine der CREATE TABLE-Anweisungen in Ihrem SQL zu bearbeiten. Fügen Sie eine neue Spalte hinzu oder ändern Sie den Typ einer vorhandenen. Wenn Sie mit Skeema pushen, generiert Skeema eine ALTER TABLE-Anweisung, die die entfernte Tabelle entsprechend aktualisiert.

Potenziell destruktive Operationen wie das Löschen einer Tabelle oder das Ändern des Datentyps einer Spalte sind standardmäßig deaktiviert. Dies hilft Ihnen, unbeabsichtigten Datenverlust zu vermeiden, wenn Sie Skeema versehentlich ausführen oder einen falschen Server angeben. Destruktive Operationen werden aktiviert, indem das Flag –allow-unsafe zu den Push-Befehlen von Skeema hinzugefügt wird.

Verwenden mehrerer Umgebungen

Eine häufige Verwendung von Skeema ist die Synchronisierung mehrerer Umgebungen. Wenn Sie lokale, Entwicklungs- und Produktionsserver haben, können Sie diese mit Skeema benennen, damit Sie nahtlos zwischen ihnen pushen und ziehen können.

Werbung

Bearbeiten Sie die .skeema-Datei in Ihrem Schemaverzeichnis um diese Funktion zu aktivieren. Dies ist eine INI-ähnliche Konfigurationsstruktur, bei der jeder Abschnitt eine neue benannte Umgebung definiert. Sie haben zunächst eine einzelne Produktionsumgebung, die von skeema init hinzugefügt wird.

Geben Sie die Verbindungsdetails jedes Servers an, damit Sie per Push und Pull alles synchron halten können. Schlüssel am Anfang der Datei, außerhalb eines Abschnitts, sind globale Einstellungen, die auf alle Umgebungen angewendet werden.

default-character-set=utf8mb4 default-collation=utf8mb4_general_ci generator=skeema:1.5.2-community schema=example-db [production] Flavor=mysql:8.0 host=example.com port=3306 password=example user=mysql [local] Flavor=mysql:8.0 host=localhost port=3306 password=example user=mysql

Jetzt können Sie Änderungen zwischen Umgebungen problemlos synchronisieren:

skeema pull local skeema push production

Diese Befehlssequenz aktualisiert zuerst Ihre SQL-Dateien auf der Festplatte, damit sie mit dem Schema Ihres lokalen Servers übereinstimmen. Die Änderungen werden dann auf die Live-Produktionsumgebung angewendet. Alternativ können Sie die SQL auf der Festplatte manuell bearbeiten und dann sowohl auf die lokale als auch auf die Produktion übertragen.

Dieser Ansatz macht Datenbankmigrationen einfach, wiederholbar und weniger fehleranfällig. Sie könnten Skeema in eine CI-Pipeline integrieren, um Datenbankänderungen als Teil Ihres regulären Bereitstellungsablaufs in die Produktion einzuführen.

Trockenläufe und Lints

< p>Manchmal möchten Sie vielleicht die Änderungen überprüfen, die eine Umgebung benötigt, ohne sie tatsächlich anzuwenden. Verwenden Sie in diesem Fall skeema diff, um eine benannte Umgebung mit Ihren SQL-Dateien auf der Festplatte zu vergleichen. Skeema zeigt dir die Unterschiede, damit du die Auswirkungen eines Skeema-Pushs antizipieren kannst.

Werbung

Skeema hat auch ein eingebautes Fusselwerkzeug. Führen Sie skeema lint aus, um Ihre SQL-Dateien zu analysieren und mögliche Probleme zu finden. Mehrere konfigurierbare Regeln werden unterstützt. Diese helfen Ihnen sicherzustellen, dass Ihre SQL konsistent ist, unterstützt und mit modernen MySQL-Best Practices kompatibel ist. Lint-Ergebnisse werden auch während skeema push- und skeema pull-Befehlen angezeigt.

Weitere Optionen

Skeema-Befehle haben mehrere gemeinsame Flags, mit denen Sie Operationen anpassen können. Hier sind einige der wichtigsten:

  • ignore-table– Geben Sie eine Liste von Tabellennamen an, die von der Synchronisierung ausgeschlossen werden sollen. Diese Tabellen werden nicht an einen Remote-Host gepusht oder von diesem abgerufen. Das Flag unterstützt die Regex-Syntax.
  • ignore-trigger – ignore-table, aber auf Trigger angewendet.
  • temp-schema – Der Name des temporären Schemas, das auf dem Datenbankhost erstellt werden soll. Diese Datenbank wird von Skeema als Ausgangspunkt für zwischenzeitliche Änderungen während Push/Pull-Operationen verwendet. Sie wird nach Abschluss des Vorgangs automatisch gelöscht.
  • Arbeitsbereich – Steuert, wo das temporäre Schema erstellt wird. Standardmäßig wird der Remote-Host verwendet, Docker wird jedoch als alternativer Wert unterstützt. Dadurch wird für jeden Skeema-Vorgang ein neuer MySQL Docker-Container auf Ihrem lokalen Computer erstellt. Es funktioniert nur, wenn Sie Docker installiert haben.
  • Verbindungsoptionen– Eine durch Kommas getrennte Liste von MySQL-Optionen, die für die Remote-Datenbankverbindung festgelegt werden sollen, z. B. sql_mode='ALLOW_INVALID_DATES',innodb_lock_wait_timeout=1.

Diese Optionen geben Ihnen mehr Kontrolle über Skeema’ s Operationen. Damit können Sie die Datenbankverbindung so einrichten, dass sie der MySQL-Konfiguration Ihrer Anwendung genau entspricht.

Schlussfolgerung

Skeema erleichtert Datenbankmigrationen durch Automatisierung und Kompatibilität mit CI/CD-Bereitstellungspipelines. Es enthält einen integrierten SQL-Linter, ein Diff-Tool und einen Synchronisationsmechanismus.

Eine Premium-Version fügt zusätzliche Funktionen hinzu, einschließlich der Möglichkeit, mit Ansichten und Triggern zu arbeiten. Skeema Premium ist ein kommerzielles Angebot, das auf dem Open-Source-Kern der Skeema Community basiert. Es kostet 99 US-Dollar/Monat und unterstützt auch Windows-Systeme.

Die Einführung von Skeema macht es Ihnen leichter, Änderungen am Datenbankschema mit Ihrem Team zu teilen und alle Ihre Umgebungen synchron zu halten. Dies ist eine sicherere Wahl als die manuelle Freigabe von ALTER TABLE-Anweisungen, die falsch platziert werden könnten und keine kanonische Darstellung Ihres aktuellen Schemas erstellen.