© ArtMari/Shutterstock.com
MariaDB: Ein sinnvoller MySQL-Ersatz?

Jesus, MariaDB und Josef!


Die MySQL-Alternative MariaDB verspricht Oracle-geplagten Entwicklern einen schmerzlosen Umstieg auf ein neues Datenbanksystem, der ohne Änderungen an der Applikationsstruktur von sich geht. Wir haben uns die Datenbank mit dem Seehund als Logo einmal genauer angesehen.

Einer der großen Vorteile von Open-Source-Systemen ist, dass der Nutzer bzw. der Entwickler im Allgemeinen nicht allzu sehr an das Entwicklerteam gebunden ist – eine technisch kompetente Person kann das vorliegende Projekt einfach forken, um es danach in Eigenregie weiter fortzusetzen. Forks sind – naturgemäß – zumindest bis zu einem gewissen Grad immer Glückssache: Ein gutes Beispiel dafür wäre die Qt-Forkung CopperSpice, die außerhalb einiger C++-Sektierer nie wirklich Massenreichweite erlangt hat. Gibt es allerdings einen Fork, den man mit Sicherheit als erfolgreich bezeichnen muss, so ist das die im Jahr 2009 unter dem Eindruck der Sun-Oracle-Übernahme gestartete MySQL Forkung MariaDB. Das dahinterstehende Unternehmen – nach mehreren Umbenennungen nennt man sich nun MariaDB Foundation – pflegt das System seit 2009 und brachte wenige Tage vor der Fertigstellung der Arbeiten an diesem Artikel eine neue Version der Datenbank mit der Nummer 10.6.0 auf den Markt. In den folgenden Schritten wollen wir uns die Möglichkeiten der Datenbank mit dem Seehund als Logo im Detail ansehen.

Datenbank im Container

Mit NoSQL-Datenbanksystemen aufgewachsene Entwickler reagieren oft etwas konsterniert, wenn sie feststellen, dass ein Datenbanksystem nicht im Thread der Applikation lebt – das gilt übrigens auch für das Mini-SQL-System SQLite. In der schönen neuen Welt der containerbasierten Virtualisierung muss sich allerdings nicht auf das komplette Installieren eines hauseigenen Servers festgelegt werden. Stattdessen ist es auch möglich, MariaDB testweise in einem Docker-Container zu betreiben, der sich bei Bedarf rückstandsfrei von der Maschine putzen lässt. Der Autor wird in den folgenden Schritten diesen Weg gehen – unter einer jungfräulichen Ubuntu-20.04-LTS-Workstation müssen wir im ersten Schritt das Docker-Installationsskript ausführen, um die Containerverwaltungswerkzeuge herunterzuladen:

tamhan@TAMHAN18:~$ curl -sSL https://get.docker.com/ | sh

Docker ist ein durchaus empfindliches System, weshalb die Interaktion mit der Containerverwaltung und der dazugehörigen Runtime normalerweise Superuser-Rechte voraussetzt. Wer wie der Autor mit seinem normalen Benutzernamen arbeiten möchte, muss im nächsten Schritt den Docker-Dienst starten und seinen gerade angemeldeten Benutzer zur Docker User Group hinzufügen:

tamhan@TAMHAN18:~$ sudo systemctl start docker tamhan@TAMHAN18:~$ sudo gpasswd -a "${USER}" docker Adding user tamhan to group docker

An dieser Stelle ist ein Reboot der Workstations erforderlich, um Linux Gelegenheit zur Aktualisierung der diversen Permission-Speicher zu gewähren. Ob der hohen Verbreitung von MariaDB steht ein für die Ausführung des Datenbankservers geeignetes Image mittlerweile im Docker Hub zur Verfügung. Wer mit einer Alphaversion (oder dem gerade aktuellen Release) der Version 10.6 arbeiten möchte, kann das Herunterladen des Docker Image bei bestehender Internetverbindung nach folgendem Schema anweisen:

tamhan@TAMHAN18:~$ docker pull mariadb:10.6 . . . docker.io/library/mariadb:10.6

Nach dem Herunterladen des Images bietet es sich an, nach folgendem Schema einen Start des Images zu befehlen:

tamhan@TAMHAN18:~$ docker run --name mariadbtest -e MYSQL_ROOT_PASSWORD=mypass -p 3306:3306 -d docker.io/library/mariadb:10.6 . . .

So weit Docker auch zur Virtualisierung der Datenbank befähigt ist, so sehr muss sich das System in die Grenzen des zugrunde liegenden Betriebssystems einfügen. Wer auf seiner Workstation schon einen gewöhnlichen MySQL-Server hat, wird an dieser Stelle mit der Fehlermeldung „listen tcp4 0.0.0.0:3306: bind: address already in use.“ abgespeist. Sie weist darauf hin, dass der Port 3306 bereits in Verwendung ist und deshalb nicht mehr mit dem Container verbunden werden kann. In der Theorie könnten wir den Parameter -p wegfallen lassen, um keine Verbindung zwischen physikalischen TCP-IP-Ports des Hosts und den logischen Ports des Containers herzustellen. Alternativ dazu können wir den MySQL-Server auch beenden, oder aber – wie hier – eine Anpassung der Compilerkonfiguration vornehmen. Zur Lösung des Problems müssen Sie den Container im ersten Schritt entfernen, und anschließend nach folgendem Schema mit einem anderen Port neu initialisieren:

tamhan@TAMHAN18:~$ docker rm mariadbtest mariadbtest tamhan@TAMHAN18:~$ docker run --name mariadbtest -e MYSQL_ROOT_PASSWORD=mypass -p 3308:3306 -d docker.io/library/mariadb:10.6 25c92bcee90f4d9a0c9f2f1ecc4d17d849ee4e73ba79214685bb266d870927c8

Unsere vorerst letzte Amtshandlung besteht nun im Herausfinden der IP-Adresse, unter der auf Ihrer Workstation lebende Programme den im Container lebenden Datenbankserver ansprechen dürfen:

tamhan@TAMHAN18:~$ docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mariadbtest 172.17.0.2

Einrichtung des Kommandozeilenwerkzeugs

Als SQL-Datenbank nimmt MariaDB – nomen est omen – textuelle Anfragen in der gleichnamigen Anfragesprache entgegen. Aufgrund der Geschichte und Entstehung als MySQL-Forks gilt allerdings, dass die beiden Datenbank-Engines – zumindest zu einem sehr weiten Grad – kompatibel sind. Nach Ansicht des MariaDB-Entwicklerteams dürfte der Gutteil der Datenbanknutzer keine wesentlichen Unterschiede zwischen den beiden Systemen bemerken – detaillierte Informationen für Umstiegswillige finden sich auf der Homepage der Datenbank [1]. Die Kommunikation zwischen einem Anwenderprogramm und einer MariaDB- bzw. MySQL-Datenbankinstanz erfolgt normalerweise durch Bibliotheken, Connectors genannt, die – je nach Funktionsumfang – mehr oder weniger fortgeschrittene OOP-Funktionen zur Verfügung stellen. Interessanterweise lässt sich ein Gros der MySQL-Kollektoren ohne Änderungen auch gegen einen MariaDB-Server anwenden. Für erste Experimente wollen wir uns mit dem MySQL-Kommandozeilenwerkzeug begnügen, dass das direkte Absetzen textueller Queries ermöglicht. Hierzu beschaffen wir uns im ersten Schritt durch Eingabe des folgenden Kommandos eine Bash-Shell, die Docker im Container...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang