zurück zum Artikel

Die Neuerungen in MySQL 5.1

Test & Kaufberatung | Test

Mit neuen Funktionen will sich MySQL 5.1 mehr denn je als "große" Datenbank für Unternehmen empfehlen.

Drei Jahre haben sich Entwickler seit dem großen Sprung auf MySQL 5.0 Zeit gelassen, bis sie nach zahlreichen Vorabversionen die neue Version 5.1 [1] der populären Datenbank freigegeben haben. MySQL 5.1.30 (General Availability) steht auf zahlreichen Mirror-Servern [2] zum Download bereit.

Die Neuerungen in MySQL 5.1

Die wohl wichtigste Neuerung in MySQL 5.1 sind die Partitionierungsfunktionen. Damit ist es möglich, sehr große Tabellen über mehrere physikalische Dateien und Festplatten zu verteilen. MySQL unterstützt dabei die so genannte horizontale Partitionierung, bei der Datensätze anhand eines Kriteriums ausgewählt und an verschiedenen Orten gespeichert werden, wobei sich insbesondere DATE-Spalten für die Partitionierungsfunktion anbieten. Vertikale Partitionierung, also die getrennte Speicherung verschiedener Spalten, wird nicht unterstützt, lässt sich aber mit relativ wenig Aufwand durch eine zweite Tabelle – beispielsweise mit selten benutzten BLOB-Feldern – selbst realisieren.

In der Vergangenheit hat man Datenbank-Partitionierung häufig eingesetzt, um die Größenlimits von Festplatten zu umgehen. Im Zeitalter von RAID, LVM und Terabyte-Festplatten rückt ein anderes Argument in den Vordergrund: Partitionierung kann Datenbankabfragen stark beschleunigen. Wenn eine Tabelle beispielweise Datensätze von 1980 bis 2010 enthält und nach dem Datum in sechs Teiltabellen zerlegt wird, muss für eine Abfrage der Art "SELECT ... WHERE datum BETWEEN 2003 AND 2004" nur eine der Teiltabellen konsultiert werden. Anstatt eine Million Datensätze zu verarbeiten, sind weniger als 200.000 Datensätze zu berücksichtigten. Theoretisch lassen sich Abfragen mit speziellen Funktionen (zum Beispiel SUM oder COUNT) über partitionierte Tabellen auch über mehrere Threads verteilen, diese Optimierungsform unterstützt MySQL aber noch nicht. Auch sonst gibt es für partitionierte Tabellen diverse Einschränkungen, die etwa die Formulierung der Partitionierungsfunktion oder den Einsatz von Foreign-Key-Regeln betreffen.

Ebenfalls neu ist der sogenannte Event Scheduler. Diese Komponente kümmert sich darum, zuvor definierte SQL-Kommandos in regelmäßigen Zeitabständen auszuführen. Das MySQL-Handbuch vergleicht diese Funktion mit cron-Jobs unter Unix/Linux.

Anwendungsmöglichkeiten für diese Funktion gibt es viele: Die regelmäßige Protokollierung des Datenbankzustands, automatische Backup- oder Synchronisationsdienste (wobei es hierfür eher die Replikationsfunktionen von MySQL anbieten), die regelmäßige Generierung von Tabellen mit häufig benötigten Abfrageergebnisse (etwa Top-10-Listen, die einmal stündlich oder einmal täglich generiert werden und dann blitzschnell zur Verfügung stehen) und so weiter. Ein gravierender Nachteil derartiger Events besteht allerdings darin, dass es sich hier um eine MySQL-Eigenentwicklung fernab irgendwelcher SQL-Standards handelt.

Auch die Replikationsfunktionen zur Synchronisation einer Datenbank über mehrere MySQL-Server wurden erweitert: Bisher führte der Replikations-Slave einfach alle am Replikations-Master ausgeführten SQL-Kommandos nochmals aus. Die neue datensatzbasierte Replikation erlaubt es, direkt die geänderten Daten zu übertragen. Das ist in manchen Fällen effizienter und erlaubt die Replikation auch beim Einsatz nicht deterministischer Funktionen wie UUID(). Standardmäßig gilt nun ein Mischmodus, bei dem die datensatzbasierte Replikation nur eingesetzt wird, wenn dies erforderlich ist oder einen Geschwindigkeitsvorteil verspricht.

Die virtuelle information_schema-Datenbank ermöglicht seit MySQL 5.0 die Abfrage nach diversen Metainformationen: welche Datenbanken und Tabellen existieren, welche Merkmale deren Spalten haben, welche Benutzer, Trigger, Stored Procedures und Views definiert sind und so weiter. In MySQL 5.1 wurde der Umfang dieser Datenbank stark erweitert und ist ein wichtiges Hilfsmittel für diverse administrative Aufgaben.

Eine Besonderheit von MySQL besteht darin, dass es unterschiedliche Tabellentypen gibt, die durch verschiedene Datenbank-Engines wie MyISAM und InnoDB realisiert werden. Neu in MySQL 5.1 ist ein Plugin-API, mit der sich Engines nachträglich hinzufügen und entfernen lassen. Momentan wirkt dieses API noch etwas ausgegoren – so muss jedes Plugin für jede MySQL-Subversionsnummer neu kompiliert werden. Tabellen-Plugins sind daher derzeit wohl eher ein Hilfsmittel für Entwickler als eine bequeme Erweiterungsmöglichkeit. Längerfristig könnten Tabellen-Plugins aber ein interessantes Marktsegment öffnen, in dem Anbieter für spezielle Aufgaben optimierte MySQL-Plugins anbieten.

Eine eigentlich naheliegende Idee ist es, Protokollinformationen nicht in gewöhnliche Dateien zu schreiben, sondern in Tabellen. MySQL 5.1 bietet diese Möglichkeit für das General Query Log und das Slow Query Log (aber nicht für das für die Replikation erforderliche Binary Log). Allerdings hat sich gezeigt, dass diese Funktion den MySQL-Server in manchen Anwendungen ausbremsen kann [3]. Das reduziert den Wert dieser neuen Funktion erheblich, zumal es einen entsprechenden Bugfix erst mit Version 6.0 geben soll.

Wer in MySQL-Tabellen XML-Daten speichert, wird sich über zwei neue Funktionen freuen: "ExtractValue" wendet einen XPath-Ausdruck auf eine XML-Zeichenkette an und liefert als Ergebnis eine neue Zeichenkette. "UpdateXML" ersetzt innerhalb einer XML-Zeichenkette eine durch einen XPath-Ausdruck ausgewählte Teilzeichenkette durch eine andere. Die beiden XML-Funktionen sind in manchen Fällen durchaus praktisch, machen aus MySQL aber sicherlich noch keine XML-Datenbank.

Was die MySQL-Programmierung betrifft, gibt es für PHP-Entwickler eine interessante Neuerung: Beginnend mit PHP 5.3 kommt die mysqlnd-Bibliothek als neues Backend für die PHP-Extensions mysql, mysqli und wahrscheinlich auch für PDO/mysql zum Einsatz. mysqlnd ersetzt damit die für C-Programmierer konzipierte Bibliothek libmysql. Die von MySQL-Entwicklern erstellte Bibliothek mysqlnd ist nicht nur etwas effizienter als libmysql, sondern lässt sich direkt in den PHP-Code integrieren.

Die mysqlnd-Entwickler haben versprochen, dass sich an der Syntax und Anwendung der PHP-Schnittstellen mysql, mysqli und PDO/mysql durch das neue Backend nichts ändern wird. Ganz stimmt das aber nicht: mysqlnd unterstützt nur das in MySQL 4.1 eingeführte sicherere Authentifizierungsverfahren. Auf manchen Linux-Distributionen kommt dieses Verfahren aber aus Kompatibilitätsgründen bis heute nicht zum Einsatz (old_passwords=1 in my.cnf). Das lässt Login-Probleme beim Umstieg auf PHP 5.3 befürchten, die sich dann nur durch die Neugenerierung aller MySQL-Passwörter beheben lassen.

Die MySQL Workbench hilft beim visuellen Entwurf neuer Datenbanken.
Die MySQL Workbench hilft beim visuellen Entwurf neuer Datenbanken.

Für MySQL existieren diverse Administrationswerkzeuge mit grafischer Benutzeroberfläche. Zu den schon seit Jahren verfügbaren Programmen (MySQL Query Browser und MySQL Administrator) sind weitere GUIs hinzugekommen: Die MySQL Workbench ermöglicht den visuellen Entwurf von Datenbankschemata. Das Programm steht momentan nur für Windows zur Verfügung, die Linux-Version befindet sich erst im Alpha-Stadium.

Das MySQL Migration Toolkit ermöglicht den Import von Datenbanken aus anderen Datenbanksystemen.
Das MySQL Migration Toolkit ermöglicht den Import von Datenbanken aus anderen Datenbanksystemen.

Das auf Java basierende und damit plattformunabhängige MySQL Migration Toolkit hilft dabei, Datenbanken aus anderen Datenbanksystemen nach MySQL zu migrieren. Für die eigentlichen Tabellen und deren Inhalt funktioniert dies gut. Ein Import von Stored Procedures und Triggern ist dagegen nicht möglich, weil nahezu jedes Datenbanksystem eine andere Syntax für SPs verwendet. Ärgerlich ist auch, dass ein Verbindungsaufbau zum Microsoft SQL Server das selten eingesetzte SQL-Server-Authentifizierungsverfahren erfordert: Die Windows-Authentifizierung "alias integrated security" wird nicht unterstützt.

Die genannten Administrationswerkzeuge stammen von den MySQL-Entwicklern und sind wie MySQL selbst kostenlos verfügbar. Für Enterprise-Kunden bietet die MySQL Workbench noch einige Zusatzfunktionen. Diese Zielgruppe kann auch den neuen Enterprise Monitor [4] einsetzen, um den Status eines oder mehrerer MySQL-Server zu verfolgen und nach Optimierungsmöglichkeiten zu suchen.

MySQL bietet die Datenbank nach dem Dual-Licensing-Prinzip [5] an: Neben der GPL-Version existiert eine kostenpflichtige Variante für kommerzielle Anwendungen, die den Anwender nicht zur Einhaltung der GPL-Pflichten, speziell zur Offenlegung eigener Weiterentwickkungen, verpflichtet. Im Herbst 2006 ging MySQL noch einen Schritt weiter: Für die GPL-Version (Community Edition) stellt MySQL nur noch im Halbjahrestakt kompilierte MySQL-Installationspakete zur Verfügung. Abonnenten der kostenpflichtigen Enterprise-Version erhalten dagegen nicht nur Support und den Enterprise Monitor, sondern auch monatliche Updates. Bei MySQL 5.0 hinkte die Community Edition oft weit hinter der aktuellen Version der Enterprise Edition her.

Diese Vorgehensweise entspricht durchaus den Regeln der GPL: Einerseits steht der tagesaktuelle Source-Code via Bazaar [6] zur Verfügung, andererseits werden kommerzielle Kunden nicht daran gehindert, die gerade aktuelle Enterprise-Version weiterzugeben.

Dennoch sind viele Open-Source-Anwender verärgert [7] über diese Strategie. Wer als Anwender der Community Edition in Form von Fehlerberichten, Patches und so weiter zur Entwicklung von MySQL beiträgt, erntet die Früchte dieser Arbeit später als Enterprise-Kunden. Auch bei sicherheitskritischen Updates ist die lange Wartezeit auf die jeweils nächste Community Edition unbefriedigend.

Nicht einmal für die zahlenden Kunden ist die Situation wirklich ideal, da die Enterprise-Version von einer wesentlich kleineren Anwendergruppe genutzt und getestet wird, sodass es länger dauern kann, bis Fehler entdeckt und behoben sind. Andere Anbieter, die ihre Produkte in einer freien Community- und einer kostenpflichtigen Enterprise-Version anbieten, verfolgen eher die umgekehrte Strategie, beispielsweise Red Hat: Die hochaktuelle Fedora-Distribution ist kostenlos verfügbar, Red Hat Enterprise Linux hingegen setzt auf Stabilität und lange Release-Zeiträume.

Immerhin ist MySQL nach der Übernahme durch Sun [8] im Januar 2008 für eine Milliarde US-Dollar von der Idee abgekommen, einzelne MySQL-Features nur für Enterprise-Kunden anzubieten [9]. So gilt weiterhin: Der gesamte Code des MySQL-Servers untersteht ohne Einschränkungen der GPL. Diese Regel gilt allerdings nicht für externe Zusatzsoftware wie dem Enterprise Monitor.

Lange vor der Fertigstellung von MySQL 5.1 machte MySQL im April 2007 die erste öffentliche Testversion von MySQL 6 [10] verfügbar – freilich noch ohne Terminplan. Die beiden wichtigsten Neuerung in MySQL 6 werden die transaktionsfähigen Tabellentypen Falcon und Maria sein. Falcon [11] ist besonders für den Einsatz auf Rechnern mit viel RAM und vielen CPUs optimiert. Allerdings hat Jim Starkey, der wichtigste Falcon-Entwickler, MySQL im Juni 2008 verlassen [12]. Maria [13] wiederum ist eher für große Datenbanken optimiert und soll längerfristig den MyISAM-Tabellentyp ersetzen.

Falcon und Maria sind die (späte) Antwort MySQLs auf den Kauf der Firma Innobase durch Oracle [14]. Deren Datenbank-Engine InnoDB wird wegen ihrer Transaktionsunterstützung und der hohen Geschwindigkeit von vielen MySQL-Anwendern bevorzugt. Obwohl InnoDB weiterhin GPL-konform weiterentwickelt wird und lediglich das externe Hot-Backup-Programm kostenpflichtig ist, belastet die Abhängigkeit von Oracle das Vertrauen in die längerfristige Zukunft des InnoDB-Tabellentyps. Ob und wann einer der beiden neuen Tabellentypen InnoDB das Wasser reichen kann, muss sich allerdings noch zeigen.

Etwas verblüffend ist der Umstand, dass einige langjährige Defizite von MySQL auch für Version 6 nicht auf der Agenda stehen. Dazu zählen unter anderem Debugging-Funktionen für Stored Procedures, Foreign-Key-Regeln (die momentan nur InnoDB-spezifisch implementiert sind) sowie Backups im laufenden Betrieb (Hot-Backups), die momentan nur ein kostenpflichtiges InnoDB-Addon bietet.

Eine Liste interner Mängel des MySQL-Servers fasst ein Vortrag des MySQL-Mitgründers Michael ('Monty') Widenius [15] zusammen: schlechte Skalierung ab acht CPUs/Cores, nicht optimale RAM-Nutzung, keine externe Benutzerauthentifizierung (etwa via LDAP), ineffizienter interner SQL-Parser, mangelnde Community-Beteiligung, unklare Release-Politik und so weiter. Der Vortrag verblüfft in seiner Ehrlichkeit, macht aber auch deutlich, wie viel Arbeit MySQL noch vor sich hat. Das legt den Schluss nahe, dass wir auf MySQL 6.0 wohl noch einige Zeit warten müssen.

Bis es soweit ist, sorgt das Projekt Drizzle für frischen Wind [16]. Dabei handelt es sich um einen minimalistischer MySQL-Fork auf der Basis von Version 6.0 [17]. Aus dem Code wurden viele Erweiterungen der letzten Jahre wieder entfernt, darunter Views, Stored Procedures, Trigger sowie diverse exotische Tabellentypen. Auch die Windows-Version ist dem Aufräumeifer zum Opfer gefallen. Das Ziel ist einerseits eine Art MySQL Lite (GPL-only, also ohne kommerzielle Variante), andererseits ein sauberer, aufgeräumter Code. An Drizzle arbeiten neben vielen MySQL-Fans auch MySQL-Angestellte mit – und zwar mit dem offiziellen Segen von Sun.

Typische LAMP-Entwickler, die mit kleinen bis mittelgroßen Websites zu tun haben, werden vom Sprung auf Version 5.1 kaum profitieren. Da stellt sich schon eher die Frage, ob das ehemals schlanke Datenbanksystem nicht schon mit zu viel Overhead überfrachtet ist und vielleicht auch SQLite (oder irgendwann Drizzle) ausreichen würde.

Wesentlich positiver wird das Urteil großer, kommerzieller Kunden ausfallen: Für diese Zielgruppe sind die Neuerungen in MySQL 5.1 attraktiv und versprechen mehr Effizienz – umso mehr, je größer die Datenbank ist. MySQL bietet zwar nach wie vor weniger Funktionen als Oracle, SQL Server und Co., punktet dafür aber mit hoher Geschwindigkeit und einem nicht zu übertreffenden Preis-/Leistungsverhältnis.

Abzuwarten bleibt, ob die scharfe Trennung zwischen Community und Enterprise Edition langfristig zielführend ist: MySQL vergällt damit vielen Open-Source-Fans die Lust an der Mitarbeit. (odi [18])


URL dieses Artikels:
http://www.heise.de/-221625

Links in diesem Artikel:
[1] http://dev.mysql.com/tech-resources/articles/mysql-5.1-recap.html
[2] http://dev.mysql.com/downloads/mirrors.html
[3] http://bugs.mysql.com/bug.php?id=30414
[4] https://www.heise.de/meldung/MySQL-Enterprise-Server-mit-neuem-Analysewerkzeug-217408.html
[5] https://www.heise.de/ct/artikel/MySQL-Die-freie-Wahl-221933.html
[6] http://dev.mysql.com/tech-resources/articles/getting-started-with-bazaar-for-mysql.html
[7] http://www.mysqlperformanceblog.com/2008/07/01/should-we-proclaim-mysql-community-edition-dead/
[8] https://www.heise.de/meldung/Sun-kauft-MySQL-AB-fuer-eine-Milliarde-US-Dollar-Update-179176.html
[9] https://www.heise.de/ct/artikel/Die-Woche-MySQL-und-das-Geld-221511.html
[10] https://www.heise.de/meldung/MySQL-6-kommt-mit-Falcon-Update-173193.html
[11] http://dev.mysql.com/tech-resources/articles/falcon-in-depth.html
[12] https://www.heise.de/meldung/Falcon-Architekt-verlaesst-MySQL-AB-214055.html
[13] http://monty-says.blogspot.com/2008/01/maria-engine-is-released.html
[14] https://www.heise.de/meldung/MeinSQL-DeinSQL-Oracles-SQL-136198.html
[15] http://www.scribd.com/doc/2575733/The-future-of-MySQL-The-Project
[16] https://www.heise.de/meldung/Abspaltung-von-MySQL-fuer-Webanwendungen-189309.html
[17] http://openquery.com.au/products/about-drizzle
[18] mailto:odi@heiseopen.de