MariaDB statt MySQL

Foto: Nick Youngson/CC BY-SA 3.0

Debian installiert standardmäßig MariaDB statt MySQL. Für viele Server-Betreiber war das die wichtigste aller Neuigkeiten der am 17. Juni 2017 erschienenen stabilen Version Debian 9 aka „Stretch“. Aber was heißt schon neu? Ausgerechnet die besonders aufmerksam über Open-Source-Software in den eigenen Archiven wachenden Debianer stießen reichlich spät zur MariaDB-Party hinzu – weshalb die 14 Monate zuvor erschienene LTS-Version des Debian-Abkömmlings Ubuntu immer noch MySQL installiert.

Mehr als nur ein politisch korrekter Fork

Historisch gesehen ist MariaDB ist ein Fork von MySQL, angestoßen von mehreren MySQL-Entwicklern unter Führung von Gründer Michael „Monty“ Widenius, nachdem MySQL von der Java-Firma Sun übernommen wurde. Seit 2016 wird MariaDB von einer Stiftung getragen, ist also wirklich frei, während Oracle sich MySQL mitsamt Sun einverleibte. Mit dem Umschwenken zu MariaDB hat das Debian-Projekt aber mehr getroffen als nur eine politisch-korrekte Entscheidung: Zahlreiche Postings in Mailinglisten und anderswo belegen die Unzufriedenheit der Debian- und Ubuntu-Entwickler mit der intransparenten Update-Politik von Oracle.

Inzwischen ist MariaDB mehr als nur ein komplett offener MySQL-Fork. Hatten beide Datenbanken bis zur Ausgabe 5.5 gleiche Versionsnummern, wichen die MariaDB-Entwickler bei Version 5.6 vom Gleichschritt ab und gaben ihr selbstbewusst die Nummer 10.0; nicht nur hatte sich die Code-Basis der beiden Datenbanken stark verändert, sondern MariaDB führte selbst neue Features ein. Seit Version 10.1 wird die Cluster-Software Galera mitgeliefert, die eine hoch performante, synchrone Datenbank-Replikation über mehrere Master-Server (anstelle einer Master-Slave-Replikation) ermöglicht. Umgekehrt bringt MySQL 5.7 neue Features mit, die nicht mehr von MariaDB umgesetzt wurden.

Was bedeuten diese divergenten Entwicklungen nun für den Anspruch von MariaDB, ein Drop-in Replacement für MySQL zu sein? Da Debian noch MySQL 5.5 installiert hat, sollte die Migrations-Basis unproblematisch sein. Wie gesagt: Beide Datenbanken entwickeln sich erst ab Version 5.6 bzw 10 stark auseinander.

Grundsätzlich kann MariaDB also MySQL jederzeit ersetzen, ohne dass beispielsweise die PHP-Schnittstellen zur Datenbank (mysqli oder PDO) ihre Funktion einstellen müssten, und der Linux-Admin kann seine mysql*-Kommandos aus der Bash-Historie getrost weiter verwenden.

All apps and tools, such as the popular LAMP stack, in the repositories that depend on the mysql-server package will continue to work using MariaDB as the database. For new installs there is nothing different that needs to be done when installing the mysql-server or mariadb-server packages.

So schreiben die MariaDB-Entwickler in Ihrem Umzugs-Dokument für Debian 9, das Upgrader trotz allem unbedingt lesen sollten.

Vom Upgrade gibt es kein Zurück

Natürlich war der Wechsel in der streitbaren Community nicht unumstritten – bis hin zu einem verärgerten Bug-Report, denn es ist ja so:

Wer sein Debian 8 mit MySQL 5.5 upgradet, bekommt Debian 9 mit MariaDB in Version 10.1 heraus. Und wer auf einem frischen Debian 9

$ apt install mysql-server

ausführt, erhält das gleiche Ergebnis – MariaDB statt MySQL. „Schuld“ daran ist ein neues Debian-Metapaket namens default-mysql-server, das die von den Debian-Betreuern bevorzugte Datenbank samt Abhängigkeiten installiert.

Obacht: Wer seine alten Datenbanken einmal per Upgrade auf MariaDB 10.1 hochgezogen hat, kann nicht einfach so zurück, da die Binärdateiformate nicht abwärtskompatibel sind. Die Debian-Entwickler empfehlen deshalb, vor dem Upgrade Backups mit mysqldump zu erstellen.

Insgesamt spült das oben aufgeführte install-Kommando folgende Pakete auf den Server:

Die folgenden NEUEN Pakete werden installiert:
 default-mysql-server galera-3 gawk libaio1 libarchive13 libcgi-fast-perl
 libcgi-pm-perl libdbd-mysql-perl libdbi-perl libencode-locale-perl
 libfcgi-perl libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl
 libhttp-date-perl libhttp-message-perl libio-html-perl libjemalloc1
 liblwp-mediatypes-perl liblzo2-2 libmariadbclient18 libmpfr4 libreadline5
 libsigsegv2 libterm-readkey-perl libtimedate-perl liburi-perl
 mariadb-client-10.1 mariadb-client-core-10.1 mariadb-common
 mariadb-server-10.1 mariadb-server-core-10.1 mysql-common mysql-server
 psmisc rsync socat

Root und Passwort für Umsteiger

MySQL verfügt über eine eigene Benutzer-Verwaltung, und natürlich hält es MariaDB genauso. Anders als bei MySQL fragt das Installations-Skript jedoch nicht nach einem Root-Passwort. In MariaDB wird der Linux-Superuser – und nur der – ohne Passwort-Abfrage auch als Datenbank-Root-User angemeldet. Dann reicht also

$ mysql -uroot

zum Login. Um trotzdem ein Root-Passwort zu setzen und gleichzeitig ein paar härtende Modifikationen für den Produktiveinsatz durchzuführen, nutzt man das Dialog-basierte Script

$ mysql_secure_installation

Überraschung: Auch danach funktioniert ein Root-Login mit korrektem Passwort nur mit Superuser-Rechten. Unprivilegierte Benutzer bekommen dies zu sehen:

$ mysql -uroot -p
Enter password: 
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Denn MariaDB prüft immer noch – wie schon vor der Passwort-Einrichtung – den Linux-Benutzer. Mit der folgenden Befehlszeile lässt sich diese Prüfung im Datenbank-Client abzuschalten:

> update mysql.user set plugin = "" where User="root";
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
> flush privileges;
Query OK, 0 rows affected (0.00 sec)

Drum prüfe, wer sich ewig bindet

Alle, die ihre Bindung an MySQL nun doch nicht auflösen möchten, werden im unstable-Zweig von Debian fündig. Wer Debian 8 aktualisieren möchte, sollte das Upgrade auf MySQL 5.7 vorher einspielen, dann werden die Pakete später nicht durch MariaDB ersetzt. Die Alternative wäre, direkt auf das Apt-Repository des Herstellers MySQL zurückzugreifen. In beiden Fällen dürften Admins nachts nicht unbedingt besser schlafen.

 

1 comment on “MariaDB statt MySQL”

Schreibe einen Kommentar