MySQL

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
MySQL

Logo von MySQL
Basisdaten

Entwickler Oracle Corporation(bis Februar 2008:MySQL AB,bis Januar 2010:Sun Microsystems)
Erscheinungsjahr 23. Mai 1995
AktuelleVersion 8.0.38[1]
(1. Juli 2024)
Betriebssystem Unix-ähnliches System,Microsoft Windows[2],FreeBSD[2],Solaris[2],Linux[2],macOS[2]
Programmier­sprache C++,C[3]
Kategorie Datenbankmanagementsystem
Lizenz GNU General Public License, Version 2[4],proprietäre Lizenz[5]
deutschsprachig ja
mysql

MySQL[ˌmaɪɛskjuːˈɛl][6]ist eines der weltweit verbreitetsten[7]relationalen Datenbankverwaltungssysteme.Es ist alsOpen-Source-Software sowie als proprietäre Enterpriseversion für verschiedene Betriebssysteme verfügbar und bildet die Grundlage für vieledynamische Webauftritte.

MySQL wurde seit 1994 vom schwedischen UnternehmenMySQL ABentwickelt. Im Februar 2008 wurde MySQL AB vom UnternehmenSun Microsystemsübernommen, das seinerseits im Januar 2010 vonOraclegekauft wurde.

Der NameMySQLsetzt sich zusammen aus dem VornamenMy,den die Tochter des MySQL-AB-MitbegründersMichael Wideniusträgt, undSQL.[8][9]

Einsatzgebiete und Verbreitung

[Bearbeiten|Quelltext bearbeiten]

Ein bevorzugtes Einsatzgebiet von MySQL ist die Datenspeicherung fürWebservices.MySQL wird dabei häufig in Verbindung mit demWebserverApachebzw.Nginxund der SkriptsprachePHPeingesetzt. Dieser Aufbau stand und steht bis heute alsLAMP-Stack (Linux / Apache / MySQL / PHP) oder LEMP-Stack (das „e “steht dann für [e]nginx) als Download zur Verfügung. Viele Webdienste bedienen sich dieser Architektur und betreiben je nach Größe und Bedarf eine Vielzahl von MySQL-Servern, über die die Zugriffe aus dem Netz abgewickelt werden.[10]MySQL wird unter anderem verwendet vonFlickr,[11] YouTube,[12]Facebook[13][14]undTwitter.[15]Daneben wird MySQL in vielen Produkten alseingebettetes Datenbanksystemeingesetzt.[16] MariaDBist ein Fork von MySQL und zu MySQL kompatibel, so dass MySQL-Datenbanken recht einfach migriert werden können. Der Begründer von MySQL Monty Widenius hat nach dem Kauf von MySQL durch Oracle den neuen Fork entwickelt und erweitert diesen gemeinsam mit einem Team ehemaliger Core-Entwickler von MySQL, so dass weitere Features inzwischen verfügbar sind. Eine Rückmigration ist nach Nutzung dieser Features teilweise nicht mehr ohne Weiteres möglich. Dies gilt insbesondere, wenn Speicher-Engines wie ColumnStores verwendet werden, die MySQL so nicht kennt.[17]

Plattformen und Schnittstellen

[Bearbeiten|Quelltext bearbeiten]

MySQL ist auf vielenUnix-Varianten,macOSundLinux,aber auch aufWindows,OS/2undi5/OS(ehemals OS/400) lauffähig.

Struktur des verwendeten Speichersystems

[Bearbeiten|Quelltext bearbeiten]

MySQL sieht grundsätzlich einen MySQL-Server vor, auf dem Daten gespeichert sind, und einen oder mehrere MySQL-Clients, die Anfragen an den Server schicken, die dieser beantwortet. DerStandardportfür den MySQL-Server ist3306imTransmission Control Protocol(TCP).

Auf demDatenbankmanagementsystem,dem MySQL-Server, können mehrere Datenbanken erstellt werden. In einerDatenbankkönnen mehrere Tabellen angelegt werden. Praktisch erstellt MySQL dabei für jede Datenbank einen Ordner auf der Festplatte, in dem Dateien für die Struktur und die Daten der einzelnen Tabellen abgelegt werden. Das genaue Format dieser Dateien hängt von der für die jeweilige Tabelle verwendeten Speicherengine ab.

Die Tabellen können jeweils von einem unterschiedlichen Typ sein. Der Tabellentyp legt fest, welche Speicherengine (Speichersubsystem) für Anfragen an eine Tabelle verwendet wird. Jede Tabelle kann Spalten enthalten, in denen Daten eines festgelegten Datentyps gespeichert werden können (z. B.Integer(ganze Zahlen) oderStrings(Zeichenketten)). Die maximale Größe der Tabellen wird grundsätzlich nur durch dasBetriebssystemlimitiert.

Ablauf der Verarbeitung einer Anfrage

[Bearbeiten|Quelltext bearbeiten]

Ein Client kann Datenbankanfragen an einen MySQL-Server schicken. Dieser ist dafür zuständig, jede Anfrage möglichst performant zu bearbeiten. Dabei wird zunächst der Query-Cache befragt und bei nicht vorhandenem Ergebnis die Anfrage geparst, optimiert und schließlich ausgeführt; das Ergebnis wird dann zurückgegeben.

Um die Performance zu verbessern, kann MySQL die Ergebnisse von Anfragen in einem Zwischenspeicher, dem Query-Cache, ablegen. Sollte später eine identische Abfrage an den Server geschickt werden, ohne dass sich in der Zwischenzeit die Daten in der Datenbank verändert haben, wird sie aus dem Cache beantwortet. Es muss dann nicht auf die Datenbank selbst zugegriffen werden.[18]

Soll eine Query ausgeführt werden, wird zunächst geprüft, ob ihreSyntaxgültig ist. Sie wird dazu in ihre einzelnen Komponenten zerlegt. Zugleich werden einige grundlegende Informationen über die Query gesammelt, wie etwa die Art der Query (z. B. SELECT, INSERT, SET oder GRANT), die betroffenen Tabellen oder die Inhalte der WHERE-Klausel. Am Ende dieses Schrittes kennt MySQL den Parse-Baum, der danach optimiert werden kann.[19]

Ist eine Abfrage syntaktisch gültig, dann wird sie als Nächstes optimiert. Dabei sucht derOptimizernach dem effizientesten Weg, die Query zu bearbeiten. Dazu wird hauptsächlich versucht, die Anzahl der zu lesenden Datensätze möglichst gering zu halten. Dies wird etwa, wenn Datensätze aus mehreren Tabellen gelesen werden müssen, durch eine geschickte Abfragereihenfolge (JOIN) der Tabellen erreicht; nicht benötigte Tabellen werden komplett aus dem JOIN entfernt. Der Optimizer berücksichtigt unter anderem, ob es sinnvoll ist, zur Lokalisierung der gesuchten Datensätze einen Index zu verwenden (und wenn ja, welchen), oder ob es besser wäre, stattdessen einen Table-Scan durchzuführen, d. h., die komplette Tabelle zu durchlaufen.

Die zur Verfügung stehenden Alternativen werden vom Optimizer bewertet. Dabei wird aufgrund vonHeuristikenfür jede Möglichkeit geschätzt, wie lange die Ausführung benötigen würde. Diejenige Alternative, die die geringsten Kosten hat, wird anschließend tatsächlich durchgeführt.

Die Arbeit des Optimizers lässt sich mit dem MySQL-KommandoEXPLAINnachvollziehen. Dieser Befehl (gefolgt von einer bestimmten Query) beauftragt den Optimizer, seinenQuery-Planzurückzugeben. Als Ausgabe erhält der Nutzer Informationen für jeden Schritt, den der Optimizer zur Beantwortung der Query durchführen würde. Auf diese Art lässt sich mit etwas Hintergrundwissen ermitteln, inwiefern die Query optimiert werden kann, so dass sie schneller ausgeführt werden kann.[18]

Michael WideniusundDavid Axmarkbegannen 1994 mit der Entwicklung von MySQL.[20]Es wurde zunächst als Klon fürmSQLentwickelt, um Datenbanken des maskengesteuerten DatenbanksystemsUNIREGin Web-Anwendungen verfügbar zu machen. (UNIREG war 1979 von Michael Widenius entwickelt und ca. 1986 in die Programmiersprache C umgeschrieben worden, damit es auch unter UNIX-Systemen lief.) MySQL war daher sowohl zu mSQL als auch UNIREG voll kompatibel.

Nach einem internen Release am 23. Mai 1995 wurde die Software im Jahr 1997 sofort unter der Versionsnummer 3.1 veröffentlicht, um zu signalisieren, dass sie auf einem Kern basiert, der schon eine lange Geschichte hat. Sie war von Anfang an für große Datenmengen und sehr gute Performance ausgelegt, teils auf Kosten von Stabilität und Verfügbarkeit. Der Funktionsumfang hingegen war zunächst beschränkt. So gab es nur wenige Tabellentypen und keine Transaktionen. Typischerweise werden neue Eigenschaften auf Wunsch der Anwender implementiert, die dadurch ein sehr großes „Mitspracherecht “haben.

Mit der im Januar 2001 veröffentlichten Version 3.23 verfügte MySQL über zwei Tabellentypen mitTransaktionen,wobei der eine (InnoDB) denACID-Kriterien genügt. Alle Operationen, die allgemeine SQL-Eigenschaften betreffen, sind für alle Tabellentypen gleich, während die Eigenschaften der Tabellentypen aufgrund der unterschiedlichen Architektur sehr verschieden sein können. So besitzt der TypMyISAMbereits seit der frühen Version 3.23 eine sehr leistungsfähige Volltext-Suche, die beim Typ InnoDB nicht implementiert ist. Neu in Version 3.23 ist ebenfalls das Replikationssystem. Es ist für den Einsatz in einemRechnerverbundausgelegt und bietet sich für einenunterbrechungsfreienBetrieb an. Dabei sind demDatenbankmanagementsystem(DBMS) mehrere Datenbanken auf unterschiedlichen Rechnerknoten zugeordnet. Eine der Datenbanken fungiert als Master; hier werden die Datenbankinhalte verändert. Das Replikationssystem verteilt anschließend die datenverändernden SQL-Kommandos auf die anderen Datenbanken, die diese Änderungen lokal auf ihren Tabellen nachvollziehen. Es handelt sich hierbei also um eine asynchroneReplikationder SQL-Kommandos. Mit demMySQL Clustersteht ein Tabellentyp zur Verfügung, bei dem die gesamte Datenbank im Arbeitsspeicher alsIn-Memory-Datenbankvorgehalten werden kann. Es wird synchrone Replikation zwischen allen Clusterknoten und Transaktionsverarbeitung unterstützt, jedoch keine Volltextsuche.

MySQL 4.0, das im März 2003 freigegeben wurde, erlaubt die Nutzung vonUnionsund führte einen Query-Cache ein, der die Ergebnisse häufig benutzter SQL-Anfragen zwischenspeichert.[21]

Im Oktober 2004 wurde MySQL 4.1 veröffentlicht. Es bietet eine Datenspeicherung in unterschiedlichen Zeichensätzen pro Tabelle an; unter anderem wird auchUnicodeunterstützt. Unterabfragen (Subqueries/Subselects) sind möglich.[22]

Version 5.0 wurde im Oktober 2005 freigegeben. Sie unterstützt alle imSQL3-Standarddefinierten Objekttypen. Neu in Version 5 ist dabei die Unterstützung vonViews,Triggern,Stored ProceduresundUser Defined Functions.

Im Februar 2008 übernahm Sun Microsystems MySQL AB. Als Kaufwert wird eine Milliarde Dollar genannt; davon 200 Millionen in Aktienoptionen.[23][24]

Im November 2008[25]wurde MySQL 5.1 freigegeben. Zu den Neuerungen zählen außerPartitionsfunktionen,mit denen sehr große Tabellen in mehrere physikalische Dateien aufgeteilt werden können, ein Event-Scheduler, mit dessen Hilfe zuvor definierte SQL-Kommandos in regelmäßigen Zeitabständen ausgeführt werden können, sowie Funktionen des Instanzenmanagers. Die API wurde überarbeitet, so dass nun das Laden und Entladen von Komponenten während der Laufzeit und ohne Neustart des Servers möglich ist.[26]

Im Januar 2010 wurde Sun Microsystems von Oracle gekauft.[27]Wenige Monate später gab Oracle bekannt, dass die bereits von MySQL AB begonnene Entwicklung derDatenbank-EngineFalconeingestellt wird.

Ende 2010 wurde MySQL 5.5 veröffentlicht. InnoDB wurde zur Standard-Speicherengine. Die Performance wurde durch die Nutzung von asynchronem I/O verbessert. Neu sind auch die Kommandos SIGNAL/RESIGNAL, die standardkonforme Fehlerbehandlung in Stored Procedures erlauben.[28][29]

Das im Jahr 2012 veröffentlichte MySQL 5.6 umfasst u. a.MemcachedAPIs,globale Transaktions-IDs und Verbesserungen am PERFORMANCE_SCHEMA.[30]

Im Januar 2009, bereits bevor Oracle MySQL AB kaufte, startete Monty Widenius einen GPL-Fork,MariaDB.MariaDB basiert auf der Code-Basis von MySQL server 5.5 und hat sich das Ziel gegeben, weitgehend die Kompatibilität zu den von Oracle herausgegebenen MySQL-Versionen zu erhalten.[31]

Die Entwicklung von MySQL 5.7 hat insgesamt über zwei Jahre in Anspruch genommen, bis es schließlich Ende Oktober 2015 veröffentlicht werden konnte. Die neue Version zeichnet sich insbesondere durch eine gesteigerte Performance, verbesserte Replikation und Logging aus. So erweiterten die MySQL Entwickler beispielsweise den Abfragenoptimierer um ein dynamisches Kostenmodell, was eine schnellere Ausführung ermöglicht und dem Nutzer mehr Eingriffsmöglichkeiten bietet.[32]

Mit einem Versionssprung auf MySQL 8 erschien im Jahr 2018 die nächste Weiterentwicklung. Laut der Doku[33]ist die 8er Versionsreihe offenbar ein Upgrade, sodass die Versionsnummern momentan zweigleisig gezählt werden.

Seit der Übernahme von MySQL AB von Sun durch Oracle steht das Datenbanksystem immer häufiger in der Kritik. Der Unterschied zwischen der freien und proprietären Version von MySQL wird immer gravierender.[34]Neue Funktionen sind häufig nur noch in der proprietären Version von MySQL enthalten. Dazu kommen die nicht-öffentliche Datenbank mit Fehlermeldungen, veraltete Bazaar-Archive und fehlende Tests für die Fehlersuche.[35]

Seit Ende 2012 erodiert auch der Rückhalt in der OpenSource-Gemeinschaft für MySQL. NachFedoraundOpenSUSEhaben Anfang 2013 auchSlackwareundArch Linuxdas MySQL-Paket durchMariaDBersetzt, einen Fork des Mitbegründers Widenius. Auslöser seien der mangelnde Respekt gegenüber der Gemeinschaft und die zunehmend abgeschottete Entwicklung des RDBMS.[36]Ebenso wechselte dieWikimedia FoundationAnfang 2013 zu MariaDB.[37]

Jaroslav Reznik, Red Hats Fedora-Projekt-Manager, erklärte, dass sich MySQL in Richtung eines geschlossenen Projektes entwickle. Alle nützlichen Informationen zu Sicherheitsfragen (CVEs) würden nicht mehr veröffentlicht. Es existierten keine vollständigen Regressionstests mehr und ein sehr großer Teil der MySQL-Bug-Datenbank sei nun nicht mehr öffentlich.[38]

Michael Widenius, der ehemalige Gründer von MySQL AB kritisiert Oracle scharf: Oracle habe klargemacht, dass sie kein Interesse an Open Source hätten, die Zusammenarbeit mit der Community ablehnten und auch MySQL im Allgemeinen nicht mögen würden. Als Beispiele für die Missachtung der Open-Source-Prinzipien nennt er die proprietären Erweiterungen für MySQL, die inzwischen nichtöffentliche Fehler-Datenbank und den Mangel an Testfällen für neuen MySQL-Code. Vorzeige-Funktionen, wie das Online-Backup und Fremdschlüssel für alle Speicher-Engines, die für MySQL 6.0 versprochen wurden, seien nicht veröffentlicht worden, obwohl sie fertig entwickelt und bereit seien. Statt Fehler zu beheben, entferne Oracle Funktionen. Die meisten der ursprünglichen MySQL-Entwickler hätten Oracle verlassen. Als weitere Beweise für die „Verachtung “der MySQL-Anwender nennt er den „scharfen “Anstieg der Lizenz- und Support-Gebühren und das Fehlen einer offenen Roadmap.[39]

Speichersubsysteme

[Bearbeiten|Quelltext bearbeiten]

MySQL bietet verschiedene Speichersubsysteme (Engines) an. Jede Engine ist für ein spezielles Einsatz-Szenario optimiert. Im Vergleich zu der traditionellen Mehrschichtenarchitektur von Datenbanksystemen sind die Engines kein reines Speichersubsystem, sondern bieten mehr Funktionalität. So liegt die Verwaltung von Transaktionen, von Indizes und referenziellen Integritäten in der Hand der Engine.

Die einzelnen Speicherengines unterstützen unterschiedliche Funktionen und weisen je nach Einsatzgebiet eine unterschiedliche Performance auf. Je nachdem, wozu eine Tabelle benutzt wird (z. B. hauptsächlich lesende SELECT-Anfragen oder hauptsächlich schreibende INSERT/UPDATE-Anfragen), sollte eine passende Speicherengine gewählt werden. Ein anderes Kriterium für die Wahl der Speicherengine kann auch die Notwendigkeit sein, eine bestimmte Funktion zu nutzen, wie z. B.Transaktionenoder referenzielle Integrität.

MySQL kann auch um eigene Speicherengines erweitert werden.[40]Neben den von MySQL veröffentlichten und mit MySQL mitgelieferten Engines gibt es auch Engines anderer Hersteller.

Offizielle Engines

[Bearbeiten|Quelltext bearbeiten]

MyISAMbietet schnellen Zugriff auf Tabellen und Indizes ohne Transaktionssicherung. Parallele Datenbankzugriffe (Concurrency) verwaltet MySQL auf Tabellenebene, das heißt die komplette Tabelle wird je nach Sperrungsart für bestimmte Operationen gesperrt (Read- oder Write-Lock). Eine Vielzahl von simultanen Lesezugriffen ist möglich, da Lesezugriffe nur sogenannte READ-Locks akquirieren. Diese erlauben es anderen „READERN “, auf den gleichen Datensatz gleichzeitig zuzugreifen. Schreibzugriffe müssen allerdings warten, bis alle gegenwärtigen „READER “ihre Leseoperationen abgeschlossen haben und damit ihren READ-Lock freigeben. Ein „READER “muss somit nur andere „WRITER “blocken.

Ein Datensatz, der geändert wird, kann weder gelesen noch anderweitig geschrieben werden. Somit muss ein „WRITER “(schreibender Zugriff auf Daten) andere „READER “und „WRITER “blocken. Dies geschieht durch einen „Write-Lock “. Auch dieser findet auf Tabellenebene statt, somit kann in dieser Zeit weder lesend noch schreibend auf die gesamte Tabelle zugegriffen werden, bis der „Write-Lock “aufgehoben wird.

Für einen Querymix, der vor allem aus Lesezugriffen besteht, ist MyISAM eine sehr effiziente Speicher-Engine. Weitere Vorteile von MyISAM sind:

  • flexibelste Autoincrement-Eigenschaft aller Speicherengines
  • MyISAM-Tabellen können in komprimierte read-only Tabellen konvertiert werden
  • MyISAM-Tabellen können feste Zeilenlänge haben, die eine schnellere Zeilensuche ermöglicht
  • MyISAM-Tabellen können verwendet werden, um MERGE Tabellen zu erstellen
  • MyISAM ist hoch portierbar, da die Tabellendateien (.frm Datei (Tabellenstruktur),.MYD (Datendatei),.MYI (Indexdatei)) auf eine andere Maschine kopiert werden können und dort sofort als Datenbanktabellen zur Verfügung stehen.
  • Mächtige Volltextsuche

MySQL verwaltet die Zugriffsrechte über Grant-Tabellen in der Datenbank mysql, die (auch in der neuesten Version) ausschließlich in MyISAM-Tabellen gespeichert werden. MyISAM kann beim Kompilieren oder Serverstart deshalb nicht ausgeschlossen werden. Bis MySQL-Version 5.1 war MyISAM außerdem die Standard-Speicher-Engine, danach nahm InnoDB diesen Platz ein.

InnoDBbietet transaktionssichere Lese- und Schreibzugriffe, d. h., es bietet Begin-, Commit- und Rollback-Funktionen. Dadurch wird sichergestellt, dass eine Abfrage oder ein Satz zusammengehöriger Abfragen entweder ganz oder gar nicht, nicht aber unvollständig ausgeführt wird. Die gewünschte Isolationsebene der Transaktionen kann eingestellt werden. Dadurch kann die Sicherheit der vollständigen und korrekten Ausführung verringert werden, was sich positiv auf die Ausführungsgeschwindigkeit auswirkt.

InnoDB bietet ferner die Möglichkeit, Fremdschlüssel-Beziehungen zu überprüfen. Seit MySQL 5.5 ist InnoDB die Standard-Speicher-Engine.[28]Ab MySQL 5.6 wird auch in InnoDB-Tabellen eine Volltextsuche möglich sein.[41]Jedoch erfüllt InnoDB den SQL3-Standard nicht vollständig: Fremdschlüssel werden nur eingeschränkt unterstützt.[42]

InnoDB speichert die Tabellenstruktur in einzelnen frm-Dateien, Nutzdaten und Indizes in einem Tabellenraum. Der Tabellenraum wird vor Beginn der Arbeit mit dem Datenbankserver eingestellt und kann sich über eine oder mehrere Dateien erstrecken. Die Dateien des Tabellenraums können auf verschiedene Verzeichnisse verteilt werden. Die Konfiguration des Tabellenraums kann nicht nachträglich angepasst werden, ohne Datenverlust zu riskieren. Nach einer Änderung der Konfiguration des Tabellenraums wird die gesamte Datenbank von einer Sicherungskopie wiederhergestellt.

MERGE bietet die Möglichkeit, mehrere Tabellen vom Typ MyISAM mit gleicher Struktur zu einer Tabelle zusammenzufassen und die Zugriffe darauf auszuführen. Dabei können komprimierte MyISAM- mit nicht-komprimierten MyISAM-Tabellen zusammengefasst werden. Auf diese Weise lässt sich Datenarchivierung realisieren.

Management von temporären Tabellen. Die Definition der Tabellen wird auf der Festplatte permanent gespeichert. Die Daten werden im Arbeitsspeicher gespeichert. Es werden jedoch nicht alle Datentypen unterstützt. Bei einem Neustarten des Servers sind die Tabellenstrukturen noch vorhanden, die Inhalte müssen neu eingelesen werden, beispielsweise aus permanenten Tabellen. Es sind spezielle Verfahren zur Speicherplatz-Verwaltung implementiert, um den Platz von gelöschten Sätzen bei der nächsten Einfügung wiederzuverwenden.

Code-Beispiel für die Entwicklung einer eigenen Speicher-Engine. EXAMPLE hat Funktionen zum Erstellen einer Tabelle, die Funktionen zum Schreiben und Lesen der Datensätze sind nur angedeutet. Ein SELECT-Statement liefert immer eine leere Ergebnismenge.

BDB ist die Abkürzung fürBerkeley DB.Diese Speicher-Engine wurde vonSleepycat Softwareentwickelt und später anOracleverkauft. Die BDB bietet Transaktionssicherheit und besondere Vorkehrungen, damit bei einem Systemausfall die gespeicherten Daten erhalten bleiben.

Die BDB-Speicher-Engine wird ab Version 5.1 nicht mehr weiter unterstützt.

Die FEDERATED-Engine bietet Zugriff auf Tabellen, die auf einem anderen Server liegen. Wenn man eine Tabelle vom Typ FEDERATED erstellt, dann muss die entfernte Tabelle auf dem anderen Server bereits existieren. Der lokale Server verhält sich wie ein Client, der auf den entfernten Server zugreift. Die FEDERATED-Engine verhält sich wie einföderiertes Informationssystem,das bedeutet, dass sie die Daten selber nicht speichert, sondern Zugriff auf den fernen Server gewährt, während auf diesem ebenfalls auf die Daten zugegriffen werden kann. Bei der Version 5.0 kann nur auf andere MySQL-Server zugegriffen werden.

Die Zugangsdaten zu dem entfernten Datenbankserver werden dabei unverschlüsselt in der lokalen frm-Datei gespeichert. Der Zugriff auf das Datenverzeichnis muss auf der Betriebssystemebene eingeschränkt werden um das Auslesen der Zugriffsrechte durch Unbefugte zu verhindern.

Die ARCHIVE-Engine ist für die Speicherung von großen Datenmengen bei einem möglichst sparsamen Umgang mit dem zur Verfügung stehenden Speicherplatz konzipiert. Es können keine Indizes erstellt werden. Nur die Zugriffe INSERT und SELECT werden unterstützt. Der schnelle Zugriff auf die Daten steht hier nicht im Vordergrund.

Vor dem Speichern der Daten auf dem Speichermedium werden diese zunächst in einem Kompressionspuffer gesammelt. Wenn eine Serie von Einfüge-Operationen beendet wird, wird der optimaleKompressionsalgorithmusermittelt und die Daten werden komprimiert ausgegeben.

Falls während einer Sequenz von Einfüge-Operationen von einem anderen Benutzer eine SELECT-Anfrage kommt, wird eine vorzeitige Kompression und Ausgabe der im Kompressionspuffer gespeicherten Daten erzwungen.

Bei der CSV-Engine werden die Daten imCSV-Formatgespeichert: Zahlen werden nicht binär, sondern als Ziffernfolgen gespeichert; die einzelnen Werte werden durch Kommata getrennt.

BLACKHOLE wurde entwickelt, um die Syntax von SQL-Statements zu prüfen und ein Binärlog zu schreiben. Die Daten werden nicht gespeichert. Dadurch können Syntaxprüfungen von SQL-Statements ausgeführt werden, ohne dass Speicherplatz zum Speichern der Daten bereitgestellt werden muss. Die Ausgabe des Binärlogs kann über einen Parameter aktiviert und deaktiviert werden.

Die BLACKHOLE-Engine ist ideal für die folgenden Aufgaben:

  • Syntaxprüfung von Dump-Dateien
  • Testen der Datenreplikation durch anschließenden Vergleich der Binärlogs auf dem Master-Server und dem Slave-Server.
  • Zeitmessungen zur Bestimmung des Aufwands für das Schreiben des Binärlogs.

NDB ist die Abkürzung fürNetworkDataBase. Die NDB-Speicher-Engine ist eine unabhängige Komponente, die die persistente Speicherung von Daten ermöglicht und für die Koordination aller Zugriffe auf Datenknoten in einemMySQL Clusterzuständig ist.[43]Anwendungen können direkt auf die NDB-Speicher-Engine über die NDB-API oder über einen MySQL-Knoten zugreifen. Der Zugriff über einen MySQL-Knoten ist für Anwendungsprogrammierer wesentlich einfacher zu gestalten, da in diesem Fall Standard-SQL-Befehle verwendet werden können und das Erlernen der NDB-Spezialitäten nicht notwendig ist.

Die NDB-API ist einemultithreading-fähige Schnittstelle zur Annahme aller ankommenden Datenanfragen.[43]Für jede Anfrage werden ein oder mehrere Threads gestartet. Auf die NDB-API ist nur ein sequenzieller Zugriff möglich, wodurch die Leistung des Clusters bei sehr vielen ankommenden Anfragen vermutlich eingeschränkt wird.

Engines anderer Anbieter

[Bearbeiten|Quelltext bearbeiten]

Neben den offiziellen Engines bieten mehrere Hersteller auch andere Engines mit anderen Eigenschaften oder Zusatzfunktionen. Einige seien hier beispielhaft erwähnt.

Die Revision Engine vonDDEnginefügt eine automatische Versionierung als Plugin auf Ebene einer Speicherengine hinzu. Neben dem reinen Speichern von Daten kann diese Engine dadurch gewährleisten, dass Daten so wieder herstellbar sind, wie sie zu einem bestimmten Zeitpunkt waren. Diese Eigenschaft kann z. B. genutzt werden um den Verlauf von Produkteigenschaften zu speichern oder um gesetzliche Auflagen zu erfüllen. Um die Daten physisch zu speichern, werden die mitgelieferten Storage-Engines benutzt.[44]

Brighthouse Engine

[Bearbeiten|Quelltext bearbeiten]

Die Firma Infobright[45]stellt die Brighthouse Engine zur Verfügung. Sie ist fürData-Warehouse-Anwendungen konzipiert und auf die Verarbeitung besonders großer Datenmengen ausgerichtet. Indizes werden nicht unterstützt. Die Daten werden komprimiert gespeichert, wodurch nach Angaben des Herstellers bis zu 90 % des Speicherplatzes eingespart werden können.[46]

Ab der Version 5.1 können MySQL-Tabellenpartitioniertwerden. Es stehen mehrere Partitionierungsarten zur Auswahl.[47]

Range-Partitionierung

[Bearbeiten|Quelltext bearbeiten]

Bei der Range-Partitionierung werden Wertebereiche für die einzelnen Partitionen definiert.

In dem Beispiel wird eine Tabelle mit drei Partitionen erstellt. Die Spalte 'region' darf bei dieser Syntax nur Werte kleiner als 30 erhalten.

CREATETABLE`kunde`(
regionintNOTNULL,
nrintNOTNULL,
namechar(30),
eddateNOTNULL
)
PARTITIONBYrange(region)(
PARTITIONp0VALUESLESSTHAN(10),
PARTITIONp1VALUESLESSTHAN(20),
PARTITIONp2VALUESLESSTHAN(30)
);

Die Partitionierung kann auch durch einen Ausdruck ermittelt werden. Der Ausdruck muss einen Integer-Wert als Ergebnis generieren. Wenn die letzte Partition mit dem Wert 'maxvalue' definiert wird, damit kann man in die Spalte 'region' (Beispiel oben) alle Integer-Zahlen einfügen bzw. in der Spalte 'ed' (Beispiel unten) alle Datumswerte einfügen.

CREATETABLE`kunde`(
regionintNOTNULL,
nrintNOTNULL,
namechar(30),
eddateNOTNULL
)
PARTITIONBYrange(year(ed))(
PARTITIONp0VALUESLESSTHAN(1990),
PARTITIONp1VALUESLESSTHAN(2000),
PARTITIONp2VALUESLESSTHANmaxvalue
);

List-Partitionierung

[Bearbeiten|Quelltext bearbeiten]

Bei der List-Partition werden die Werte einzeln aufgezählt.

Beispiel:

CREATETABLE`kunde`(
regionintNOTNULL,
nrintNOTNULL,
namechar(30),
eddateNOTNULL
)
PARTITIONBYlist(region)(
PARTITIONp0VALUESIN(1,3,5),
PARTITIONp1VALUESIN(2,4,6),
PARTITIONp2VALUESIN(10,11,12)
);

Hash-Partitionierung

[Bearbeiten|Quelltext bearbeiten]

Bei der Hash-Partitionierung wird die Verteilung der Sätze auf die einzelnen Partitionen vom DBMS ermittelt. Bei der regulären Hash-Partitionierung wird dieModulo-FunktionalsHashfunktionverwendet (Region modulo 4). Sie hat den Vorteil, dass in der Spalte 'region' alle Integer-Zahlen eingefügt werden können.

CREATETABLE`kunde`(
regionintNOTNULL,
nrintNOTNULL,
namechar(30),
eddateNOTNULL
)
PARTITIONBYhash(region)PARTITIONS4;

Es gibt auch eine 'Lineare' Hash-Partitionierung. Dabei kommt eine andereHashfunktionzum Einsatz.

Key-Partitionierung

[Bearbeiten|Quelltext bearbeiten]

Bei der Key-Partitionierung wird implizit eineHashfunktionverwendet. Als Input für die Funktion dient der Primärschlüssel der Tabelle.

CREATETABLE`kunde`(
nrintNOTNULLprimarykey,
namechar(30),
eddateNOTNULL
)
PARTITIONBYkey()PARTITIONS4;

Die Key-Partitionierung wird bei der SpeicherengineNDBimplizit bei allen Tabellen verwendet. Das erleichtert die interne Koordination der Replikation.

Bei jeder Art von Partitionierung können zusätzlich 'Subpartitions' definiert werden. Dadurch ist eine noch granularere Aufteilung der Daten möglich.

Unter Linux installiert sich MySQL in das Verzeichnis/var/lib/mysql/.Unter Windows legt der Nutzer den Ablageort der Datendateien fest – Standard ist der Ordner%ProgramFiles%\MySQL.Grundeinstellungen werden durch den Administrator in der Dateimy.cnfvorgenommen.

Kommandozeilenwerkzeuge

[Bearbeiten|Quelltext bearbeiten]

Zur Verwaltung von MySQL-Datenbanken dient der mitgelieferte Kommandozeilen-Client (Kommandosmysqlundmysqladmin). Zum Funktionsumfang gehören außerdem die folgendenKommandozeilenwerkzeuge:

mysqlimport
kann als Ersatz für 'LOAD DATA INFILE…' verwendet werden. Durch Angabe von Parametern können sich Benutzer anmelden und das Verhalten des Programms steuern.
mysqldump
kann als Ersatz für 'SELECT * INTO OUTFILE' verwendet werden. Zusätzlich kann die Tabellenstruktur als Dump ausgegeben werden. Durch Angabe von Parametern können sich Benutzer anmelden und das Verhalten des Programms steuern.
perror
zeigt zu Fehlercodes erweiterte Informationen an. Als Parameter wird beim Programmstart der Errorcode benötigt.
mysqlshow
gibt Metadaten zu Datenbanken, Tabellen oder einzelnen Tabellenspalten aus.

Grafische Werkzeuge

[Bearbeiten|Quelltext bearbeiten]

Als grafische Verwaltungssoftware bietet Oracle die SoftwareMySQL Workbenchan. Sie ist für die BetriebssystemeWindows,macOSundLinuxverfügbar.

Eine von vielen Alternativen ist die in der SkriptsprachePHPgeschriebene Open-Source-AnwendungphpMyAdmin.Diegrafische Benutzeroberflächelässt sich über einenBrowserbedienen. phpMyAdmin wird hauptsächlich zur Verwaltung von MySQL-Datenbanken auf Webservern verwendet, auf denen die einzelnen Benutzer keine Rechte haben,mysqlundmysqladmindirekt auszuführen. Zum Erstellen und Verwalten von Backups der Datenbanken auf Webservern werden – wenn keine Rechte für die Ausführung vonmysqldumpvorliegen – häufig die ebenfalls in PHP geschriebenen Open-Source-AnwendungenphpMyBackupProeingesetzt.

Lizenz und Support

[Bearbeiten|Quelltext bearbeiten]

Für den Vertrieb von MySQL Server verwendet Oracle einduales Lizenzsystem:Einerseits ist das Programm einefreie Software,die unter derGeneral Public License (GPL)steht, andererseits wird es auch unter einer proprietärenLizenzangeboten.

Unterstützung für den Einsatz von MySQL bietet zunächst das offizielle Handbuch.[48]Außerdem gibt es mehrere Foren undIRC-Channels, in denen Fragen kostenlos beantwortet werden.

Daneben bietet Oracle auch kostenpflichtige Support-Lizenzen in drei Leistungsstufen an: MySQL Enterprise Silver, Gold und Platinum.[49]Sie unterscheiden sich in Leistungsumfang und Preis.[50][51]

Mit MySQL verwandte Produkte

[Bearbeiten|Quelltext bearbeiten]
  • Von MySQL wurde das Datenbank-ProjektMariaDBabgespalten, um den für MySQL verwendeten Quellcode weiterhin frei zur Verfügung zu stellen und aktiv weiterzuentwickeln.
  • Im Jahr 2008 folgte mitDrizzleein weitererFork.[52][53][54]
  • Percona Server für MySQL ist ein fork der durch die Firma Percona entstand. Es fokussiert sich auf die Nutzung auf Servern[55]
  • WebscaleSQL war ein Zweig im MySQL-Projekt, der durch die Zusammenarbeit von Facebook, Google, LinkedIn, Twitter und der Alibaba Group entstand. Er hatte das Ziel MySQL besser auf die Bedürfnisse der genannten Firmen anzupassen.[56]Die Weiterentwicklung des Zweigs wurde inzwischen eingestellt.[57]
  • OurDelta erstellt ein eigenes SQL-Programm, dessen Version 5.0 auf MySQL basierte.[58]
  • Stefan Pröll, Eva Zangerle, Wolfgang Gassler:MySQL: Das Handbuch für Administratoren.Rheinwerk Verlag, 2015,ISBN 978-3-8362-3753-6.
Commons:MySQL– Sammlung von Bildern, Videos und Audiodateien
  1. Changes in MySQL 8.0.38 (2024-07-01, General Availability).1. Juli 2024 (abgerufen am 1. Juli 2024).
  2. abcdeSupported Platforms: MySQL Database.(englisch, abgerufen am 28. Juli 2018).
  3. https:// openhub.net/p/mysql/analyses/latest/languages_summary
  4. COPYING.(abgerufen am 27. September 2017).
  5. mysql.(abgerufen am 27. September 2017).
  6. Michael Widenius:Michael Widenius interviewed at MySQL Conference 2010.O'Reilly, April 2010,abgerufen am 16. November 2016(englisch).
  7. DB-Engines Ranking.Abgerufen am 8. September 2013.
  8. Hilfesystem der Version MySQL 5.0 Kapitel 1.3 und 1.4 oderhttp://dev.mysql /doc/refman/5.1/en/history.html
  9. 1.2.3 History of MySQL.In:MySQL.Oracle,abgerufen am 1. Juli 2023(englisch): „MySQL is named after co-founder Monty Widenius's daughter, My. “
  10. mysql.de
  11. YouTube, Flickr, and Wikipedia to Share their Secrets of Success at the 2007 MySQL Conference & Expo.O’Reilly, 10. April 2007,abgerufen am 29. September 2012.
  12. MySQL Customers by Industry: Web: Social Networks.Abgerufen am 5. Januar 2012.
  13. Jason Sobel:Keeping Up.In:Facebook Blog.21. Dezember 2007,abgerufen am 30. Oktober 2008.
  14. Om Malik:Facebook’s Insatiable Hunger for Hardware.GigaOM,25. April 2008,abgerufen am 30. Oktober 2008.
  15. Big and Small Data at Twitter: MySQL CE 2011.myNoSQL,17. April 2011,abgerufen am 20. Oktober 2011.
  16. Informationen zu MySQL Embedded Server 5.1,abgerufen am 27. September 2010
  17. https:// informatik-aktuell.de/betrieb/datenbanken/mariadb-und-mysql-vergleich-der-features.htmlVergleich MySQL und MariaDB
  18. abFür weitere Details siehe vor allem Sasha Pachev: Understanding MySQL Internals, Chapter 9: Parser and Optimizer, O’Reilly
  19. Die für das Parsing zuständigen Module befinden sich in den Dateien sql/sql_yacc.yy, sql/gen_lex_hash.cc and sql/gen_lex.cc.
  20. Five Questions With Michael Widenius - Founder And Original Developer of MySQL.Opensourcereleasefeed, archiviert vomOriginalam13. März 2009;abgerufen am 8. Juni 2009.
  21. Reference-Manual der Version 4.0(MementodesOriginalsvom 4. April 2013 aufWebCite)Info:Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäßAnleitungund entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/dev.mysql
  22. MySQL Reference-Manual der Version 4.1(MementodesOriginalsvom 4. April 2013 aufWebCite)Info:Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäßAnleitungund entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/dev.mysql
  23. Sun übernimmt MySQL - News bei TecChannel
  24. Sun kauft MySQL AB(Mementovom 31. Juli 2008 imInternet Archive)
  25. heise.de
  26. dev.mysql(MementodesOriginalsvom 17. Februar 2012 imInternet Archive)Info:Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäßAnleitungund entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/dev.mysql
  27. Oracle Pressemitteilung: Oracle Completes Acquisition of Sun
  28. aboracle
  29. heise.de
  30. Neuerungen in MySQL 5.6(MementodesOriginalsvom 23. April 2011 imInternet Archive)Info:Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäßAnleitungund entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/dev.mysql(englisch), abgerufen am 23. Juni 2012
  31. MariaDB versus MySQL – Kompatibilität.In:MariaDB KnowledgeBase.(mariadb[abgerufen am 8. Februar 2017]).
  32. Press Release: Oracle Announces General Availability of MySQL 5.7(englisch), abgerufen am 30. August 2017
  33. Doku
  34. pro-linux.de
  35. golem.de
  36. pro-linux.deSlackware wechselt zu MariaDBVon Mirko Lindner, Mo, 25. März 2013, 14:07
  37. blog.wikimedia.orgWikimedia-Foundation wechselt zu MariaDB
  38. zdnet
  39. computerworld.au(MementodesOriginalsvom 21. Februar 2016 imInternet Archive)Info:Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäßAnleitungund entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/ computerworld.au
  40. Reference-Manual von MySQL-Version 5.0 Kapitel 14. Speicher-Engines und Tabellentypen
  41. golem.de
  42. dev.mysql zu Fremdschlüssel-Beschränkungen in MySQL 5.6.dev.mysql, archiviert vomOriginalam16. April 2015;abgerufen am 1. Februar 2012.Info:Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäßAnleitungund entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/dev.mysql
  43. abLarissa Janssen:Hochleistungs-Datenbanksysteme: Theorie und Praxis,S. 190–191.
  44. ddengine.org(MementodesOriginalsvom 10. Mai 2012 imInternet Archive)Info:Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäßAnleitungund entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/ ddengine.org
  45. Website der Firma Infobright in Toronto
  46. Informationen zum Thema Data-Warehouse(MementodesOriginalsvom 24. Dezember 2011 imInternet Archive)Info:Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäßAnleitungund entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/ mysql.de
  47. dev.mysql
  48. dev.mysql
  49. mysql.de
  50. Angebot an Support-Leistungen von Oracle
  51. Oracle erhöht Preise für MySQL
  52. Artikel "MySQL-Forks und Patches"(MementodesOriginalsvom 23. Dezember 2010 imInternet Archive)Info:Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäßAnleitungund entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/ admin-magazin.de
  53. drizzle.org(MementodesOriginalsvom 14. Januar 2013 imInternet Archive)Info:Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäßAnleitungund entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/ drizzle.org
  54. krow.livejournal
  55. Percona Server for MySQL.Abgerufen am 29. Juli 2022(englisch).
  56. WebScaleSQL: MySQL for Facebook-sized databases.Abgerufen am 29. Juli 2022(englisch).
  57. WebScaleSQL | "We're Gonna Need A Bigger Database".Abgerufen am 26. Januar 2023.
  58. OurDelta | Open Query.22. August 2017,abgerufen am 29. Juli 2022(australisches Englisch).