MySQL

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
MySQL
Logo von MySQL
Entwickler Oracle Corporation (bis Februar 2008: MySQL AB, bis Januar 2010: Sun Microsystems)
Aktuelle Version 5.5.20
(10. Januar 2012)
Betriebssystem Unix, Linux, Windows, Mac OS X, i5/OS, OpenVMS
Programmier­sprache C, C++
Kategorie Datenbankmanagementsystem
Lizenz Duales Lizenzsystem (Proprietär und GPL)
Deutschsprachig ja (partiell, z. B. Fehlermeldungen und grafische Tools)
www.mysql.com

MySQL [ˌmaɪɛskjuːˈɛl] ist das weltweit weitverbreitetste[1] relationale Datenbankverwaltungssystem. Es ist als Open-Source-Software sowie als kommerzielle Enterpriseversion für verschiedene Betriebssysteme verfügbar und bildet die Grundlage für viele dynamische Webauftritte.

Ursprünglich wurde MySQL vom schwedischen Unternehmen MySQL AB entwickelt. Im Februar 2008 wurde MySQL AB von Sun Microsystems übernommen, welches 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, dem Kürzel für Structured Query Language (Strukturierte Abfragesprache).[2]

Inhaltsverzeichnis

[Bearbeiten] Einsatzgebiete und Verbreitung

MySQL ist mit mehr als 6 Millionen Installationen und über 65.000 Downloads pro Tag das populärste Open-Source-Datenbankverwaltungssystem der Welt.[1]

Ein bevorzugtes Einsatzgebiet von MySQL ist die Datenspeicherung für Webservices. MySQL wird dabei häufig in Verbindung mit dem Webserver Apache und der Skriptsprache PHP eingesetzt. 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.[3] MySQL wird unter anderem verwendet von Flickr,[4] Nokia.com,[5] YouTube,[6] Wikipedia,[7] Google,[8] Facebook[9][10] und Twitter.[11] Daneben wird MySQL in vielen Produkten als eingebettetes Datenbanksystem eingesetzt.[12]

[Bearbeiten] Plattformen und Schnittstellen

MySQL-Server und offizielle Bibliotheken sind zur Erzielung einer möglichst guten Performance hauptsächlich in ANSI C und ANSI C++ implementiert.

MySQL ist auf vielen Unix-Varianten, Mac OS X und Linux, aber auch auf Windows, OS/2 und i5/OS (ehemals OS/400) lauffähig. Seit Anfang 2008 gibt es auch eine Symbian-Variante. Für Windows werden allerdings einige Einschränkungen[13] genannt.

[Bearbeiten] Struktur des verwendeten Speichersystems

MySQL ist so aufgebaut, dass es einen MySQL-Server gibt, auf dem Daten gespeichert sind, und einen oder mehrere MySQL-Klienten, die Anfragen an den Server schicken, die dieser beantwortet.

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

[Bearbeiten] Ablauf der Verarbeitung einer Anfrage

Ein Benutzer kann Datenbankanfragen unterschiedlichster Art 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 negativem Ergebnis die Anfrage geparst, optimiert und schließlich ausgeführt um das Ergebnis zu erhalten.

[Bearbeiten] Query-Cache

Um die Performance zu verbessern kann MySQL die Ergebnisse von Anfragen in einem Zwischenspeicher, dem Query-Cache, ablegen. Sollte eine identische Abfrage bereits früher an den Server geschickt worden sein ohne dass sich in der Zwischenzeit die Daten in der Datenbank verändert hätten, wird sie aus dem Cache beantwortet. Es muss dann nicht auf Datenbankinhalte zugegriffen werden.[14]

[Bearbeiten] Parsing

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

[Bearbeiten] Optimierung

Ist ein Query syntaktisch gültig, dann wird er als nächstes optimiert. Dabei sucht der Optimizer nach dem effizientesten Weg, den 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 u.a., ob es sinnvoll ist, einen Index/Schlüssel zu verwenden (und wenn ja welchen), um die gesuchten Datensätze zu lokalisieren, oder ob es performanter wäre stattdessen einen Table-Scan durchzuführen, d.h. die Daten aus der Tabelle zu lesen.

Die zur Verfügung stehenden Alternativen werden vom Optimizer bewertet. Dabei wird aufgrund von Heuristiken für jede Alternative geschätzt, wie lange die Ausführung der einzelnen Teile, die notwendig sind, um den Query auf diese Art zu beantworten, benötigt. Diejenige Alternative, die die geringsten Kosten hat, wird schließlich vom Optimizer tatsächlich durchgeführt.

Die Arbeit des Optimizers lässt sich mit dem MySQL-Kommando EXPLAIN nachvollziehen. Dieser Befehl (gefolgt von einem bestimmten Query) beauftragt den Optimizer seinen Query-Plan darzustellen. Als Ausgabe erhält der Nutzer Informationen für jeden Schritt, den der Optimizer zur Beantwortung des Querys durchführen würde. Auf diese Art lässt sich mit etwas Hintergrundwissen ermitteln, inwiefern der Query optimiert werden kann, so dass er schneller ausgeführt werden kann.[16]

[Bearbeiten] Geschichte

Michael Widenius and David Axmark begannen 1994 mit der Entwicklung von MySQL.[17] Es wurde zunächst als Clone 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 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.

Die Menge der Eigenschaften 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 Kriterien ACID 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 Computercluster ausgelegt und bietet sich für einen unterbrechungsfreien Betrieb an. Dabei sind dem Datenbankmanagementsystem (DBMS) mehrere Datenbanken auf unterschiedlichen Rechner-Knoten 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 Clusterknoten und Transaktions-Verarbeitung unterstützt, jedoch keine Volltextsuche.

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

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.[19]

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 hat Sun Microsystems MySQL AB übernommen. Als Kaufwert wird eine Milliarde Dollar genannt; davon 200 Millionen in Aktienoptionen.[20][21]

Im November 2008[22] 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 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.[23]

Im Januar 2010 wurde Sun Microsystems von Oracle gekauft.[24] 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-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.[25][26]

[Bearbeiten] Speichersubsysteme

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. Transaktionen oder referenzielle Integrität.

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

[Bearbeiten] Offizielle Engines

[Bearbeiten] MyISAM

MyISAM bietet 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 FAST, COMPRESSED und READONLY Tabellen konvertiert werden
  • 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

MyISAM war die Standard-Speicher-Engine von MySQL bis Version 5.1 und konnte beim Kompilieren oder Serverstart nicht ausgeschlossen werden.

[Bearbeiten] InnoDB

InnoDB bietet transaktionssichere Lese- und Schreibzugriffe, d.h. es bietet Beginn- Commit- und Rollback-Funktionen. Dadurch wird sichergestellt, dass ein Query oder ein Satz zusammengehöriger Queries entweder ganz oder gar nicht, nicht aber teilweise ausgeführt wird. Die gewünschte Isolationsebene der Transaktionen kann eingestellt wird. 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.

InnoDB ist seit MySQL 5.5 die Standard-Speicher-Engine.[28]

Ab MySQL 5.6 wird auch in InnoDB-Tabellen eine Volltextsuche möglich sein.[29] Bzgl. einiger Aspekte erfüllt InnoDB den SQL3-Standard nicht vollständig: Fremdschlüssel werden ignoriert bzw. nur eingeschränkt unterstützt.[30]

[Bearbeiten] MERGE

MERGE bietet die Möglichkeit, mehrere Tabellen vom Typ MyISAM mit gleicher Struktur zu einer Tabelle zusammenzufassen und die Zugriffe darauf auszuführen.

[Bearbeiten] MEMORY (HEAP)

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.

[Bearbeiten] EXAMPLE

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.

[Bearbeiten] BDB

BDB ist die Abkürzung für Berkeley DataBase. Diese Speicher-Engine wurde von Sleepycat Software entwickelt und später an Oracle verkauft. Die BDB bietet Transaktionssicherheit und besondere Vorkehrungen, damit bei einem Systemausfall die gespeicherten Daten erhalten bleiben.

Die BDB-Speicher-Engine soll ab der Version 5.1.12 nicht mehr weiter unterstützt werden.

[Bearbeiten] FEDERATED

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 ein fö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.

[Bearbeiten] ARCHIVE

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 optimale Kompressionsalgorithmus ermittelt 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.

[Bearbeiten] CSV

Bei der CSV-Engine werden die Daten im CSV-Format gespeichert, d.h. Zahlen werden nicht binär, sondern als einzelne Ziffern gespeichert und die einzelnen Werte werden durch Kommata getrennt.

[Bearbeiten] BLACKHOLE

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.

[Bearbeiten] NDB

NDB ist die Abkürzung für Network Data Base. 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 einem MySQL Cluster zuständig ist.[31] 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 eine multithreading-fähige Schnittstelle zur Annahme aller ankommenden Datenanfragen.[31] 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.

[Bearbeiten] Engines anderer Anbieter

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

[Bearbeiten] Revision Engine

Die Revision Engine von DDEngine fü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.[32]

[Bearbeiten] Brighthouse Engine

Die Firma Infobright[33] stellt die Brighthouse Engine zur Verfügung. Sie ist für Datawarehouse-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.[34]

[Bearbeiten] NitroEDB

Die Firma NitroSecurity[35] in Portsmouth (USA) stellt die NitroEDB Engine zur Verfügung. Sie wurde für die Realtime Überwachung von Netzwerken entwickelt.[36]

[Bearbeiten] Administration

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 Datei my.cnf vorgenommen.

[Bearbeiten] Kommandozeilenwerkzeuge

Zur Verwaltung von MySQL-Datenbanken dient der mitgelieferte Kommandozeilen-Client (Kommandos mysql und mysqladmin). Zum Funktionsumfang gehören außerdem die folgenden Kommandozeilenwerkzeuge:

  • 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.

[Bearbeiten] Alternative Tools

Als grafische Verwaltungssoftware bietet Oracle die Software MySQL Workbench an, welche für Windows, MacOSX und Linux verfügbar ist.

Eine von vielen Alternativen ist die in der Skriptsprache PHP geschriebene Open-Source-Anwendung phpMyAdmin. Die grafische Benutzeroberfläche lässt sich über einen Browser bedienen. Man kann damit MySQL-Datenbanken verwalten. phpMyAdmin wird hauptsächlich zur Verwaltung von MySQL-Datenbanken auf Webservern verwendet, auf denen die einzelnen Kunden keine Rechte haben, mysql und mysqladmin direkt auszuführen. Zum Erstellen und Verwalten von Backups der Datenbanken auf Webservern werden – wenn keine Rechte für die Ausführung von mysqldump vorliegen – häufig die ebenfalls in PHP geschriebenen Open-Source-Anwendungen phpMyBackupPro oder MySQLDumper eingesetzt.

[Bearbeiten] Partitionierung

Mit der Version 5.1 können MySQL-Tabellen partitioniert werden. Es stehen mehrere Partitionierungsarten zur Auswahl.[37]

[Bearbeiten] Range-Partitionierung

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

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

CREATE TABLE `kunde` (
  region int NOT NULL,
  nr int NOT NULL,
  name char(30),
  ed date NOT NULL,
)
PARTITION BY range(region) (
  PARTITION p0 VALUES LESS THAN (10),
  PARTITION p1 VALUES LESS THAN (20),
  PARTITION p2 VALUES LESS THAN (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.

CREATE TABLE `kunde` (
  region int NOT NULL,
  nr int NOT NULL,
  name char(30),
  ed date NOT NULL
)
PARTITION BY range(year(ed)) (
  PARTITION p0 VALUES LESS THAN (1990),
  PARTITION p1 VALUES LESS THAN (2000),
  PARTITION p2 VALUES LESS THAN maxvalue
);

[Bearbeiten] List-Partitionierung

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

Beispiel:

CREATE TABLE `kunde` (
  region int NOT NULL,
  nr int NOT NULL,
  name char(30),
  ed date NOT NULL
)
PARTITION BY list(region) (
  PARTITION p0 VALUES IN (1, 3, 5 ),
  PARTITION p1 VALUES IN (2, 4, 6 ),
  PARTITION p2 VALUES IN (10, 11, 12 )
);

[Bearbeiten] Hash-Partitionierung

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

CREATE TABLE `kunde` (
  region int NOT NULL,
  nr int NOT NULL,
  name char(30),
  ed date NOT NULL
) 
PARTITION BY hash(region) PARTITIONS 4;

Es gibt auch eine 'Lineare' Hash-Partitionierung. Dabei kommt eine andere Hash-Funktion zum Einsatz.

[Bearbeiten] Key-Partitionierung

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

CREATE TABLE `kunde` (
  nr int NOT NULL primary key,
  name char(30),
  ed date NOT NULL
)
PARTITION BY key() PARTITIONS 4;

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

[Bearbeiten] Unterpartitionen

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

[Bearbeiten] Lizenz und Support

Für den Vertrieb von MySQL Server verwendet Oracle ein duales Lizenzsystem: Einerseits ist das Programm eine freie Software, die unter der General Public License (GPL) steht, andererseits wird es auch unter einer kommerziellen Lizenz angeboten.

Unterstützung für den Einsatz von MySQL bietet zunächst das offizielle Handbuch unter http://dev.mysql.com/doc/refman/5.5/en/index.html. Außerdem gibt es mehrere Foren und IRC-Channels, in denen Fragen kostenlos beantwortet werden.

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

[Bearbeiten] Mit MySQL verwandte Produkte

Von MySQL wurde das Datenbank-Projekt MariaDB abgespalten. Abgespalten in 2008 wurde Drizzle.[41][42][43] HeidiSQL ist ein Open-Source-Client für MySQL (unter Windows). MySQL Cluster ermöglicht die Installation von MySQL auf einem Computercluster in einer Shared Nothing Architecture.

[Bearbeiten] Einzelnachweise

  1. a b http://www.mysql.de/why-mysql/marketshare/
  2. Hilfesystem der Version MySQL 5.0 Kapitel 1.3 und 1.4 oder http://dev.mysql.com/doc/refman/5.1/en/history.html
  3. http://www.mysql.de/customers/
  4. YouTube, Flickr, and Wikipedia to Share their Secrets of Success at the 2007 MySQL Conference & Expo. MySQL (10 April 2007). Abgerufen am 9. Dezember 2009.
  5. MySQL.com
  6. MySQL Customers by Industry : Web: Social Networks. Abgerufen am 5. Januar 2012.
  7. Wikimedia servers – System architecture. Abgerufen am 16. Januar 2011.
  8. Thomas Claburn: Google Releases Improved MySQL Code, Information Week. 24 April 2007. Abgerufen am 30. November 2008. 
  9. Jason Sobel (21 December 2007): Keeping Up. Facebook Blog. Abgerufen am 30. Oktober 2008.
  10. Om Malik (25 April 2008): Facebook’s Insatiable Hunger for Hardware. GigaOM. Abgerufen am 30. Oktober 2008.
  11. Big and Small Data at Twitter: MySQL CE 2011. myNoSQL (17 April 2011). Abgerufen am 20. Oktober 2011.
  12. Informationen zu MySQL Embedded Server 5.1, abgerufen am 27. September 2010
  13. MySQL unter Windows im Vergleich zu MySQL unter Unix
  14. Für weitere Details siehe vor allem Sasha Pachev: Understanding MySQL Internals, Chapter 9: Parser and Optimizer, O'Reilly
  15. 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.
  16. Für weitere Details siehe vor allem Sasha Pachev: Understanding MySQL Internals, Chapter 9: Parser and Optimizer, O'Reilly
  17. Five Questions With Michael Widenius - Founder And Original Developer of MySQL. Opensourcereleasefeed.com. Abgerufen am 8. Juni 2009. (Link nicht mehr abrufbar)
  18. Reference-Manual der Version 4.0
  19. MySQL Reference-Manual der Version 4.1
  20. Sun übernimmt MySQL - News bei TecChannel
  21. Sun kauft MySQL AB www.mysql.com/news-and-events
  22. http://www.heise.de/open/artikel/Die-Neuerungen-in-MySQL-5-1-221625.html
  23. http://dev.mysql.com/doc/refman/5.1/de/mysql-5-1-nutshell.html
  24. Oracle Pressemitteilung: Oracle Completes Acquisition of Sun
  25. http://www.oracle.com/us/corporate/press/195726
  26. http://www.heise.de/ix/meldung/Erster-Release-Kandidat-von-MySQL-5-5-mit-InnoDB-als-Default-1081772.html
  27. Reference-Manual von MySQL Version 5.0 Kapitel 14. Speicher-Engines und Tabellentypen
  28. http://www.oracle.com/us/corporate/press/195726
  29. http://www.golem.de/1107/85241.html
  30. dev.mysql.com zu Fremdschlüssel-Beschränkungen in MySQL 5.6. dev.mysql.com. Abgerufen am 1. Februar 2012.
  31. a b Larissa Janssen: Hochleistungs-Datenbanksysteme: Theorie und Praxis, S. 190-191.
  32. http://www.ddengine.org/versioneng
  33. Webseite der Firma Infobright in Toronto
  34. Informationen zum Thema Data-Warehouse
  35. Webseite der Firma NitroSecurity in Portsmouth
  36. Informationen von Sun Microsystems über die NitroEDB Engine
  37. http://dev.mysql.com/doc/refman/5.5/en/partitioning-types.html
  38. http://www.mysql.de/products/
  39. Angebot an Support-Leistungen von MySQL AB
  40. Oracle streicht Basistarif
  41. Artikel "MySQL-Forks und Patches"
  42. www.drizzle.org
  43. http://krow.livejournal.com/602409.html

[Bearbeiten] Literatur

  • Baron Schwartz, Peter Zaitsev, Vadim Tkachenko: MySQL High Performance, 3. Auflage, O'Reilly 2012, ISBN 978-1449314286
  • Sasha Pachev: Understanding MySQL Internals. O'Reilly 2009, ISBN 596009577
  • Matthias Kannengießer: PHP 5 / MySQL 5, Studienausgabe. Franzis, 3. Aufl. 2009, ISBN 978-3645600101
  • Michael Kofler: MySQL. Einführung, Programmierung, Referenz. Programmer's Choice. 3., überarb. u. erw. Aufl. 2005, ISBN 3-8273-2253-7
  • George Reese, Randy Jay Yarger, Tim King: MySQL: Einsatz und Programmierung. O'Reilly 2002, ISBN 3-89721-178-5
  • George Reese: MySQL – kurz & gut. O'Reilly 2003, ISBN 3-89721-257-9
  • Paul DuBois: MySQL Kochbuch. O'Reilly 2003, ISBN 3-89721-360-5
  • Stefan Pröll, Eva Zangerle, Wolfgang Gassler: MySQL: Das Handbuch für Administratoren. Galileo Computing 2011, ISBN 978-3-8362-1715-6

[Bearbeiten] Weblinks

 Commons: MySQL – Sammlung von Bildern, Videos und Audiodateien
Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Mitmachen
Drucken/exportieren
Werkzeuge
In anderen Sprachen