Featured image of post MySQL / MariaDB zu SQLite konvertieren

MySQL / MariaDB zu SQLite konvertieren

Konvertierung einer bestehenden MySQL- / MariaDB Datenbank zu einer SQLite Datei.

Einleitung

Viele Anwendungen benutzen Datenbanken, um ihre Informationen zu speichern und zu verwalten. Dabei hat man häufig die Wahl zwischen mehreren Datenbanksystemen wie SQLite, MySQL oder PostgreSQL. Bei selbst gehosteten Tools mit wenig Nutzern und damit auch wenigen Zugriffen reicht in den meisten Fällen die Nutzung von SQLite locker aus. Dies ist eine sehr einfache Datenbank, die aus einer einzigen Datei besteht.

In der Vergangenheit habe ich mich häufig für MariaDB entschieden und habe diese zentral für alle Anwendungen betrieben. Mittlerweile möchte ich doch lieber wieder auf SQLite setzen, um die Abhängigkeit der Anwendungen zu dem zentralen Container mit der MariaDB aufzulösen.

Tool für Konvertierung

Aus diesem Grund habe ich nach einer einfachen Möglichkeit gesucht, meine bestehende MariaDB in eine SQLite-Datei zu konvertieren und diese dann direkt mit dem jeweiligen Programm weiterzunutzen. Dabei bin ich auf das Python-Tool mysql-to-sqlite3 (siehe PyPI) gestoßen. Für den Fall, dass noch jemand diesen Anwendungsfall hat, beschreibe ich hier mein Vorgehen zur Umwandlung der Datenbank.

Konvertierung der Datenbank

Die Konvertierung der Datenbank muss auf einem System erfolgen, von dem aus auch auf die MariaDB zugegriffen werden kann. Dies kann also entweder auf dem Server/Container erfolgen, auf dem die Datenbank selbst läuft oder dort, wo die Anwendung läuft, denn diese hat ja auch Zugriff auf die Datenbank.

Sollte sich die Datenbank in einem Docker Netzwerk befinden, ist es wohl am einfachsten den Datenbankport mindestens für localhost erreichbar zu machen. Bei einer MariaDB müsste eine docker-compose.yml um folgendes ergänzt werden:

1
2
3
4
[...]
    ports:
      - 127.0.0.1:3306:3306
[...]

Python installieren

Damit ein Python-Tool genutzt werden kann, muss Python logischerweise auch installiert sein. Falls es also noch fehlt, kann es folgendermaßen installiert werden:

Debian-basierte Systeme:

1
sudo apt install python3-full

RHEL-basierte Systeme wie Alma Linux:

1
sudo dnf install python3

Virtuelle Umgebung erstellen

Zur Installation und Nutzung des Tools benötigen wir eine virtuelle Python-Umgebung (venv). Diese kann zum Beispiel einfach im Home-Verzeichnis des Benutzers mit dem ihr eingeloggt seid abgelegt werden. Ein möglicher Ordnername wäre ganz allgemein .venv , aber Pfad und Name kann man frei definieren.

1
python3 -m venv ~/.venv

Anschließend befinden sich alle Daten für die virtuelle Umgebung unter ~/.venv. Diese wird jetzt aktiviert, damit alle nachfolgenden Python3 Befehle in dieser Umgebung ausgeführt werden.

1
source ~/.venv/bin/activate

Jetzt befindet sich Python3 in der virtuellen Umgebung, verlassen werden kann sie mit dem Befehl deactivate.

Paket installieren

Das gewünschte Python-Paket wird mit dem Paketmanager pip3 von Python installiert:

1
pip3 install mysql-to-sqlite3

Damit ist das Tool in der Umgebung installiert. Zum Testen lassen wir uns einmal die Hilfe des Tools anzeigen. Der Aufruf erfolgt über mysql2sqlite.

1
mysql2sqlite --help

Solange wir uns in der virtuellen Umgebung befinden kann das Tool so direkt ohne Pfadangabe aufgrufen werden. Zu finden ist es sonst unter ~/.venv/bin/mysql2sqlite.

Konvertierung durchführen

Die eigentliche Konvertierung ist jetzt nur noch ein einziger Befehlsaufruf, die Erklärung der einzelnen Optionen befindet sich unter dem Befehl:

1
mysql2sqlite -f converted.db -d DATABASE_NAME -p -h DATABASE_IP -P DATABASE_PORT -u DATABASE_USER

Konkretes Beispiel (hier eine Datenbank für Crowdsec):

1
mysql2sqlite -f crowdsec.db -d crowdsecdb -p -h 192.168.0.111 -P 3306 -u crowdsecuser

Was bedeuten die Optionen?

  • -f: Pfad/Name der zu erstellenden SQLite-Datei.
  • -d: Name der Datenbank in MySQL/MariaDB.
  • -p: Sorgt dafür, dass nach dem Absetzen des Befehls nach dem Passwort für die Datenbank gefragt wird.
  • -h: IP der MySQL/MariaDB.
  • -P: Port der MySQL/MariaDB (3306 ist der Standardport).
  • -u: Benutzername für die Datenbank in MySQL/MariaDB.

Während der Verarbeitung ist zu erkennen, welche Tabellen übertragen werden. Am Ende habt ihr dann eine Datei mit dem Namen der bei der Option -f angegeben worden ist. Dabei handelt es sich jetzt um eine einsatzbereite SQLite-Datenbank.

Abschluss

Die erstellte Datei muss jetzt nur noch in das Verzeichnis verschoben werden, in dem das jeweilige Programm seine SQLite-Datenbank erwartet. Zusätzlich muss das Programm so umgestellt werden, dass es keine Verbindung mehr zur MySQL/MariaDB aufbaut und stattdessen die SQLite-Datei nutzt. Nach dem Start sollte das Programm dann wie gewohnt weiterarbeiten.

Ich selbst konnte mit dieser Methode die Datenbanken für

  • Phantombot
  • Crowdsec

erfolgreich umstellen und gehe davon aus, dass es für den Großteil ebenfalls so funktionieren sollte.

Erstellt mit Hugo
Theme Stack gestaltet von Jimmy