MySQL [] ist eines der weltweit verbreitetsten relationalen Datenbankverwaltungssysteme. Es ist als Open-Source-Software sowie als proprietäre Enterprise-Version für verschiedene Betriebssysteme verfügbar.

MySQL wurde seit 1994 vom schwedischen Unternehmen MySQL AB entwickelt. Im Februar 2008 wurde MySQL AB vom Unternehmen Sun Microsystems übernommen, das seinerseits im Januar 2010 von Oracle gekauft wurde.

Der Name MySQL setzt sich zusammen aus dem Vornamen My, den die Tochter des MySQL-AB-Mitbegründers Michael Widenius trägt, und SQL.Hilfesystem der Version MySQL 5.0 Kapitel 1.3 und 1.4 oder http://dev.mysql.com/doc/refman/5.1/en/history.html

Einsatzgebiete und Verbreitung Ein bevorzugtes Einsatzgebiet von MySQL ist die Datenspeicherung für Webservices. MySQL wird dabei häufig in Verbindung mit dem Webserver Apache bzw. Nginx und der Skriptsprache PHP eingesetzt. Dieser Aufbau stand und steht bis heute als LAMP-Stack (Linux / Apache / MySQL / PHP) oder LEMP-Stack (das „e“ steht dann für [e]nginx) zum Herunterladen zur Verfügung. Viele Web-Dienste 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.mysql.de MySQL wird unter anderem verwendet von Flickr, YouTube, Facebook und Twitter. Daneben wird MySQL in vielen Produkten als eingebettetes Datenbanksystem eingesetzt.Informationen zu MySQL Embedded Server 5.1, abgerufen am 27. September 2010 MariaDB ist eine Abspaltung 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 die neue Abspaltung entwickelt und erweitert diesen gemeinsam mit einer Gruppe ehemaliger Core-Entwickler von MySQL, so dass weitere Funktionen inzwischen verfügbar sind. Eine Rückmigration ist nach Nutzung dieser Funktionen teilweise nicht mehr ohne Weiteres möglich. Dies gilt insbesondere, wenn Speicher-Engines wie ColumnStores verwendet werden, die MySQL so nicht kennt.informatik-aktuell.de Vergleich MySQL und MariaDB

Plattformen und Schnittstellen MySQL ist auf vielen Unix-Varianten, macOS und Linux, aber auch auf Windows, OS/2 und i5/OS (ehemals OS/400) lauffähig.

Struktur des verwendeten Speichersystems 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. Der Standardport für den MySQL-Server ist 3306 im Transmission Control Protocol (TCP).

Auf dem Datenbankmanagementsystem, dem MySQL-Server, können mehrere Datenbanken erstellt werden. In einer Datenbank kö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 Speicher-engine (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) oder Strings (Zeichenketten)). Die maximale Größe der Tabellen wird grundsätzlich nur durch das Betriebssystem limitiert.

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

Query-Cache Um die Leistung 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 Zwischenspeicher beantwortet. Es muss dann nicht auf die Datenbank selbst zugegriffen werden.Zu weiteren Details siehe vor allem: Sasha Pachev: Understanding MySQL Internals. O’Reilly. Chapter 9: Parser and Optimizer. Der Query-Cache wurde mit MySQL 5.7.20 abgekündigt und ist in MySQL 8.0 entfernt worden.

Parsing Soll eine Abfrage ausgeführt werden, wird zunächst geprüft, ob ihre Syntax gültig ist. Sie wird dazu in ihre einzelnen Komponenten zerlegt. Zugleich werden einige grundlegende Informationen über die Abfrage gesammelt, wie etwa die Art der Abfrage (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.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.

Optimierung Ist eine Abfrage syntaktisch gültig, dann wird sie als Nächstes optimiert. Dabei sucht der Optimizer nach dem effizientesten Weg, die Abfrage 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 Optimierer 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 Optimierer bewertet. Dabei wird aufgrund von Heuristiken für jede Möglichkeit geschätzt, wie lange die Ausführung benötigen würde. Diejenige Alternative, welche die geringsten Kosten hat, wird anschließend tatsächlich durchgeführt.

Die Arbeit des Optimierers lässt sich mit dem MySQL-Kommando EXPLAIN nachvollziehen. Dieser Befehl (gefolgt von einer bestimmten Abfrage) beauftragt den Optimierer, seinen Query-Plan zurückzugeben. Als Ausgabe erhält der Nutzer Informationen für jeden Schritt, den der Optimierer zur Beantwortung der Abfrage durchführen würde. Auf diese Art lässt sich mit etwas Hintergrundwissen ermitteln, inwiefern die Abfrage optimiert werden kann, so dass sie schneller ausgeführt werden kann.

Geschichte Michael Widenius und David Axmark begannen 1994 mit der Entwicklung von MySQL. Es wurde zunächst als Klon für mSQL entwickelt, um Datenbanken des maskengesteuerten Datenbanksystems UNIREG in 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 einer internen Veröffentlichung 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 Leistung 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 mit Transaktionen, wobei der eine (InnoDB) den ACID-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 Typ MyISAM bereits 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 einem Rechnerverbund ausgelegt und bietet sich für einen unterbrechungsfreien Betrieb an. Dabei sind dem Datenbankmanagementsystem (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 asynchrone Replikation der SQL-Kommandos. Mit dem MySQL Cluster steht ein Tabellentyp zur Verfügung, bei dem die gesamte Datenbank im Arbeitsspeicher als In-Memory-Datenbank vorgehalten werden kann. Es wird synchrone Replikation zwischen allen Cluster-Knoten und Transaktionsverarbeitung unterstützt, jedoch keine Volltextsuche.

MySQL 4.0, das im März 2003 freigegeben wurde, erlaubt die Nutzung von Unions und führte einen Abfrage-Zwischenspeicher ein, der die Ergebnisse häufig benutzter SQL-Anfragen zwischenspeichert.

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

Version 5.0 wurde im Oktober 2005 freigegeben. Sie unterstützt alle im SQL3-Standard definierten Objekttypen. Neu in Version 5 ist dabei die Unterstützung von Views, Triggern, Stored Procedures und User Defined Functions.

Im Februar 2008 übernahm Sun Microsystems MySQL AB. Als Kaufwert wird eine Milliarde Dollar genannt; davon 200 Millionen in Aktienoptionen.Sun übernimmt MySQL - News bei TecChannel

Im November 2008heise.de wurde MySQL 5.1 freigegeben. Zu den Neuerungen zählen außer Partitionsfunktionen, 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 Instanzenverwalters. 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.

Im Januar 2010 wurde Sun Microsystems von Oracle gekauft.Oracle Pressemitteilung: Oracle Completes Acquisition of Sun Wenige Monate später gab Oracle bekannt, dass die bereits von MySQL AB begonnene Entwicklung der Datenbank-Engine Falcon eingestellt wird.

Ende 2010 wurde MySQL 5.5 veröffentlicht. InnoDB wurde zur Standard-Speicher-engine. Die Leistung wurde durch die Nutzung von asynchronem I/O verbessert. Neu sind auch die Kommandos SIGNAL/RESIGNAL, die standardkonforme Fehlerbehandlung in Stored Procedures erlauben.oracle.comheise.de

Das im Jahr 2012 veröffentlichte MySQL 5.6 umfasst u. a. Memcached APIs, globale Transaktions-IDs und Verbesserungen am PERFORMANCE_SCHEMA. (englisch), abgerufen am 23. Juni 2012

Im Januar 2009, bereits bevor Oracle MySQL AB kaufte, startete Monty Widenius einen GPL-Abspaltung, 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.

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 Geschwindigkeit, verbesserte Replikation und Protokollierung 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.Press Release: Oracle Announces General Availability of MySQL 5.7 (englisch), abgerufen am 30. August 2017