Die Datenbank mysql

mysql ist eine Neuentwicklung aus Schweden. Man kann die jeweils aktuelle Version als Source von http://www.tcx.se herunterladen. Aktuell ist im Moment noch Version 3.20.20, in den nächsten Wochen wird die stark verbesserte Version 3.21 erwartet. Zu mysql gibt es zwei Mailinglisten, eine für Ankündigungen, die andere zur Diskussion und für Bugreports. Achtung, auf der zweiten Mailingliste herrscht reger Verkehr. Auf der Web-Seite gibte es auch vorkompilierte binary-Versionen. Allerdings bekommt man die aktuelle Version meist nur für Solaris oder BSD vorcompiliert. Etwas ältere Versionen gibt es auch für Linux als binary (auch als RPM).

Auf dem selben Server findet man auch einen 32-bit-ODBC-Client (für Windoof-95 oder NT). Außerdem gibt es Programmierschnittstellen für C (native und ODBC für UNIX), Perl, Tcl/Tk, PHP/FI, Phyton und einen JDBC-Treiber für Java (Typ 4 - native protocol, Java only). Letzterer hat allerdings die dumme Eigenschaft, für jedes parallel laufende Statement eine neue Connection eröffnen zu müssen.

Die Lizenzpolitik des Herstellers von mysql (TCX Consulting) besagt, daß man die Datenbank frei nutzen darf. Das gilt ausdrücklich auch für Webserver oder geschäftliche Anwendungen. Man muß nur etwas bezahlen, wenn man mysql in eigene Produkte einbaut und diese verkauft.

Einschätzung

mysql hat gegenüber anderen freien Datenbanken den großen Vorteil, auf einer über viele Jahre erprobten und umfangreich kommerziell genutzten Bibliothek zur Datenverwaltung mit B-Tree-Indexen aufzubauen. Dadurch hat der Kern des Systems, inbesondere bei Zurgiffen über Schlüssel, eine hervorragende Performance und ist auch recht stabil. Bei TCX lief eine Zeit lang eine mysql-Datenbank auf einer Sparc-10 (vergleichbar 486er) mit über 300 Mio Datensätzen mit ausreichender Leistung.

mysql ist mit einer Multi-Threaded/Single-Server Architektur realisiert. Dadurch ist der Aufbau einer neuen Verbindung sehr schnell und mehrere Anfragen können vom gleichen Cache profitieren.

Leider implementiert mysql bisher nur einen Teil des SQL-Standards. Es fehlen Sub-Selects und es gibt massive Einschränkungen in der WHERE-Klausel. Diese Probleme sollen in 3.21 aber gelöst sein. Eine Unterstützung für Views, Transaktionen, statisches SQL, Prepared Statements, Stored Procedures, Trigger, referentielle Integrität oder Scrollable Cursors ist allerdings nicht in Sicht. Das hat leider die Auswirkung, daß die Datenbank sehr schwierig zu Nutzen ist, wenn es um Online Transaction Processing mit einer umfangreichen Datenbankstruktur (viele verbundene Tabellen) geht. Man muß aber sagen, daß mysql in einem rasanten Tempo weiterentwickelt wird, man darf hier durchaus gespannt sein.

Durch den recht brauchbaren ODBC-Treiber ist mysql gut geeignet, Datenbestände aus PC-Anwendungen (dBase, Access) zu zentralisieren.

Fragen zu mysql werden auf der Mailingliste vom Entwickler selbst postwendend beantwortet. Bugs treten zwar noch auf, werden aber meist in kurzer Zeit behoben und entsprechende Patches nachgereicht.

mysql verfügt über einen riesigen Satz eingebauter Zusatzfunktionen (Stringvergleiche, reguläre Ausdrücke, Datumsarithmetik u.v.m.), die sich im Moment nur in der HAVING-Klausel nutzen lassen. Ich persönlich rate allerdings jedem ab, diese zu Nutzen, falls die Chance besteht, seine Anwendung könnte irgendwann auf einer anderen Datenbank laufen.

Ein großes Manko ist die fehlende feingranulare Berechtigungssteuerung. Man kann nur Rechte bezogen auf Datenbank, Benutzername und Hostname vergeben, und das noch dazu in einer haarstreubend verkomplizierten Art und Weise.

Noch eine grobe Abweichung vom Standard: Indexe lassen sich nur über CREATE TABLE oder ALTER TABLE anlegen, CREATE INDEX ist eine Dummy-Funktion.

Der Standard-Client mysql verwendet die Readline-library und läßt sich (besonders im Gegensatz zu ingres oder mSQL) wirklich schön bedienen. Er kann gleichzeitig sehr einfach aus Shellscripten genutzt werden und liefert in diesem Fall seine Daten in einem Format, welches sich mit Standard-Tools gut weiterverarbeiten läßt. Damit läßt sich mysql auch sehr einfach in CGI-Scripte einbinden.

mysql hat eine Reihe von Eigenschaften und Werkzeugen, die das Ablösen einer mSQL-Datenbank erleichtern. So sollten sich mit msqldump ausgegebene Daten einfach importieren lassen.

Installation

Da man bei binary-Versionen an einen bestimmten Installationspfad gebunden ist, ist IMHO die source-Version vorzuziehen. Man benötigt außerdem nicht allzu alte Entwicklungswerkzeuge (gcc ab 2.7.2, libc ab 5.4.13). Weiterhin wird auch LinuxThreads, Version 0.5 benötigt. Das bekommt man auf der gleichen Web-Seite wie mysql. Neuere Versionen von mysql laufen auch mit der glibc und LinuxThreads 0.6.

Zuerst muß man LinuxThreads übersetzen. Dazu packt man das Archiv in einen geeigneten Pfad aus, und verfährt nach dem enthaltenen README. In Kurzfassung:

  1. Makefile editieren (Sektion "Configuration")
  2. su (root werden)
  3. make
Als Besonderheit ist hier nur zu beachten, dass mindestens Kernel 2.0.0 gebraucht wird (LinuxThreads verwenden den Systemaufruf clone(), den es in den 1.2.xx-Kernel noch nicht gab). Auch sollte man die angegebenen Installationspfade akzeptieren, da mysql (und auch andere threaded-Anwendungen) diese standardmäßig verwenden.

Dann packt man das mysql-Archiv aus. Auch hier ist die Installation recht einfach und in einer Datei INSTALL_SOURCE erklärt. In Kurzfassung:

  1. configure aufrufen
  2. prüfen, ob LinuxThreads gefunden wurde. Ist das nicht der Fall, so verucht mysql MIT-Threads (eine Userlevel-Threadlibrary) zu verwenden, die aber unter Linux nicht funktionieren.
  3. make
  4. su (root werden)
  5. make install
  6. script scripts/mysql_install_db anpassen und aufrufen
  7. Server mit bin/safe_mysqld --log starten.
Jetzt kann man den client mit mysql test starten. Die Standardberechtigungen erlauben es jedem Benutzer, auf die Datenbanken test und test_* zuzugreifen. mysql ist in C und C++ geschrieben. Dabei werden aber die Shared-C++-Libraries nicht gebraucht.

Mögliche Probleme

Dokumentation

Im mysql-Archiv sind die FAQs in den Formaten texinfo, Postscript und HTML enthalten. Diese helfen in den meisten Fällen weiter.

Auf www.tcx.se findet sich auch eine richtige Dokumentation mit ausführlichem SQL-Teil. Der Autor (Mike Miller) hat diese in Word geschrieben und nach Postscript und HTML konvertiert (mir unverständlich, warum tut er sich das an).

Weiterhin findet man auf der Webseite ein Archiv der Mailingliste, welches man bei Problemen zuerst durchsuchen sollte.

Wenn man mysql wirklich einsetzt, sollte man sich in die Mailingliste einschreiben.

Fazit

mysql ist eine frei nutzbare Datenbank, die eine extrem gute Performance und guten Support bietet. Die Datenbank kann nur Basis-SQL, viele weitergehende Features fehlen noch, sind aber geplant bzw. bereits in Entwicklung. mysql eignet sich bereits jetzt hervorragend für Datenbanken mit keinen oder wenigen konkurrierenden Updates. Damit ist mysql als DBMS hinter einem WWW-Server sehr gut geeignet.