Artikel

Vergleiche deine Datenbankschemata mit compare_db

MySQLPHP

Stell dir vor, du könntest mit nur einem Kommandozeilenbefehl die Struktur deiner Entwicklungs- und Produktionsdatenbanken vergleichen – und das ganz automatisch! Genau dafür wurde compare_db entwickelt.

Was ist compare_db?

compare_db ist ein CLI-Tool, das speziell für den Vergleich von MySQL/MariaDB-Datenbankschemata konzipiert wurde. Es prüft, ob sich die „CREATE“-Definitionen (für Tabellen, Views, Prozeduren und Funktionen) zwischen deinen Entwicklungs- und Produktionsdatenbanken unterscheiden. Falls Abweichungen vorhanden sind, hebt das Tool diese farblich im Terminal hervor, sodass du sie sofort erkennst.

Warum compare_db verwenden?

  • Schnelle Überprüfung: Mit compare_db kannst du rasch feststellen, ob es strukturelle Änderungen in deinen Datenbanken gibt, bevor du Änderungen in Produktion übernimmst.
  • Automatisierte Qualitätssicherung: Besonders in größeren Projekten hilft das Tool, unerwartete Unterschiede zwischen verschiedenen Umgebungen aufzudecken.
  • Einfach zu bedienen: Dank einer klaren Konfiguration über eine .env-Datei und dem Einsatz von PDO für die Datenbankverbindung ist das Setup unkompliziert – selbst für komplexere Projekte.

So bekommst und nutzt du compare_db

Installation

Du kannst compare_db über Composer installieren. Der Weg dorthin ist denkbar einfach:

Paket von Packagist beziehen:

Um das Paket zu installieren, führe folgenden Befehl aus:

composer require --dev 1manfactory/compare_db

Einrichtung

Umgebungsvariablen konfigurieren:

Lege eine .env-Datei im Stammverzeichnis des Projekts an. Beispiel:

# Development Database
DEV_DB_HOST=localhost
DEV_DB_USER=dein_dev_benutzer
DEV_DB_PASS=dein_dev_passwort

# Production Database
PROD_DB_HOST=produktion_host
PROD_DB_USER=dein_prod_benutzer
PROD_DB_PASS=dein_prod_passwort

Ausführbar machen:
Stelle sicher, dass die Datei compare_db.php ausführbar ist. Dazu kannst du folgenden Befehl nutzen:

chmod +x compare_db.php

Nutzung

Starte das Tool direkt über die Kommandozeile:

./compare_db.php

Das Tool lädt zuerst deine Umgebungsvariablen, stellt dann Verbindungen zu den angegebenen Datenbanken her und vergleicht anschließend die CREATE-Definitionen. Bei Unterschieden wird dir im Terminal eine farblich markierte Ausgabe angezeigt – Rot für Abweichungen und Grün, wenn alles übereinstimmt.

Hier ein Beispiel für ein Shell-Skript, das du in deinem _dev/-Verzeichnis ablegen kannst (z. B. als run_compare_db.sh). Dieses Skript ruft dein compare_db-Skript aus dem Projektstamm auf und beendet sich mit einem Fehlercode, falls Unterschiede festgestellt werden – so kannst du es später problemlos in einen Git pre-push-Hook integrieren.

#!/bin/sh
# run_compare_db.sh
# Dieses Skript ruft das compare_db-Tool aus dem Vendor-Verzeichnis auf und
# beendet den Vorgang mit einem Fehlercode, falls Unterschiede festgestellt werden.
#
# Es ist so konzipiert, dass es später auch in einem Git pre-push-Hook verwendet werden kann.

# Ermittele das Verzeichnis, in dem sich dieses Skript befindet
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
# Der Projektstamm ist eine Ebene darüber
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"

# Pfad zum compare_db-Tool im vendor-Verzeichnis
COMPARE_DB="$PROJECT_ROOT/vendor/1manfactory/compare_db/compare_db.php"

# Überprüfe, ob die compare_db-Datei existiert und ausführbar ist
if [ ! -x "$COMPARE_DB" ]; then
    echo "compare_db nicht gefunden oder nicht ausführbar unter: $COMPARE_DB"
    exit 1
fi

# Führe das compare_db-Tool aus und speichere den Rückgabewert
"$COMPARE_DB"
RESULT=$?

if [ $RESULT -ne 0 ]; then
    echo "compare_db hat Unterschiede/Probleme festgestellt."
    exit $RESULT
fi

echo "compare_db: Keine Unterschiede/Probleme gefunden."
exit 0

Erklärung

  • Verzeichnisermittlung:
    Das Skript bestimmt zunächst den Pfad des eigenen Verzeichnisses (_dev/) und setzt dann den Projektstamm als das übergeordnete Verzeichnis.
  • Aufruf von compare_db:
    Es wird das Skript compare_db.php aus dem Projektstamm aufgerufen.
    Falls deine compare_db.php nicht direkt ausführbar ist, kannst du stattdessen php "$PROJECT_ROOT/compare_db.php" verwenden.
  • Ergebnisprüfung:
    Wird ein Fehlercode (ungleich 0) zurückgegeben, bricht das Skript ab und gibt eine Fehlermeldung aus. So kannst du es in einen pre-push-Hook integrieren, um den Push abzubrechen, falls Unterschiede in den Datenbankschemata vorliegen.

Dieses Skript lässt sich später in einen Git pre-push-Hook einbinden, indem du es in der Datei .git/hooks/pre-push aufrufst.

Mit compare_db erhältst du ein mächtiges Werkzeug, um die Konsistenz deiner Datenbankschemata in Entwicklungs- und Produktionsumgebungen zu überwachen. Es spart Zeit, minimiert Risiken und hilft dir, unerwartete Probleme frühzeitig zu erkennen. Ob du nun in kleinen Projekten oder in komplexen Anwendungen arbeitest – compare_db ist ein unverzichtbarer Helfer in deiner Toolchain.

0 Kommentare