MySQL
aus Wikipedia, der freien Enzyklopädie
MySQL | |
---|---|
Entwickler: | MySQL AB |
Aktuelle Version: | 5.0.33 (Community Server), 5.0.32 (Enterprise Server) (9. Januar 2007) |
Betriebssystem: | Unix, Linux, Windows, Mac OS X,OpenVMS |
Kategorie: | Datenbankmanagementsystem |
Lizenz: | Duales Lizenzsystem (Kommerziell und GPL Version 2) |
Deutschsprachig: | ja (partiell, z. B. Fehlermeldungen und grafische Tools) |
Website: | mysql.com |
MySQL [ˌmaɪɛskjuːˈɛl] ist ein Relationales Datenbankverwaltungssystem der schwedischen Firma MySQL AB. MySQL ist als Open Source-Software für verschiedene Betriebssysteme verfügbar und bildet die Grundlage vieler Webauftritte.
Inhaltsverzeichnis |
[Bearbeiten] Beschreibung
MySQL ist eine freie Software, die unter der General Public License (GPL) steht. MySQL kann auch mit einer kommerziellen Lizenz eingesetzt werden. (Duales Lizenzsystem)
Die Herkunft des Namens MySQL kann heute nicht mehr genau rekonstruiert werden. Seit 1996 wurden diverse Bibliotheken und Tools mit dem Präfix My geschrieben. Es wird spekuliert, dass der Name My der Tochter des Mitbegründers Monty Widenius vielleicht auch der Ursprung des Namens MySQL sein könnte. [1]
Neben vielen Unix-Varianten, Mac OS X und Linux läuft MySQL auch auf Windows und OS/2.
Einer DBMS-Engine können mehrere Datenbanken zugeordnet werden. In einer Datenbank können mehrere Tabellen angelegt werden. Die Tabellen können von unterschiedlichem Typ sein. Die maximale Größe der Tabellen wird im Prinzip nur durch das Betriebssystem limitiert.
Während frühere MySQL-Versionen nur Teile des SQL3-Sprachumfangs unterstützten (z. B. keine View-Definitionen möglich), bietet die Version 5.0 einen wesentlich erweiterten Sprachumfang an, der weitgehend dem SQL3-Standard entspricht.
Zum Funktionsumfang gehören auch einige Kommandozeilentools:
mysqlimport: Fungiert als Ersatz für LOAD DATA INFILE... Durch Angabe von Parametern können sich Benutzer anmelden und das Verhalten des Programms gesteuert werden.
mysqldump: Fungiert als Ersatz für SELECT * INTO OUTFILE. Zusätzlich kann die Tabellenstruktur gedumpt werden. Durch Angabe von Parametern können sich Benutzer anmelden und das Verhalten des Programms gesteuert werden.
perror: Zeigt zu Fehlercodes erweiterte Informationen an. Als Parameter wird beim Programmstart der Errorcode benötigt.
mysqlshow: Hiermit können Metadaten zu Datenbanken, Tabellen oder einzelnen Tabellenspalten angefordert werden.
Seit der Version 3.23.xx steht ein Replikationssystem zur Verfügung. Es ist für den Einsatz in einem Computercluster ausgelegt. Dabei sind dem DBMS mehrere Datenbanken auf unterschiedlichen Rechner-Knoten zugeordnet. Eine der Datenbanken fungiert als Master. Hier werden Daten-Updates aufgespielt. Das Replikationssystem kopiert die Masterdatenbank auf die anderen Datenbanken.
Ein bevorzugtes Einsatzgebiet von MySQL ist die Datenspeicherung für Web-Services. MySQL wird häufig in Verbindung mit dem Webserver Apache und PHP eingesetzt. Diese Kombination wird entsprechend der Anfangsbuchstaben der beteiligten Software als LAMP, MAMP bzw. WAMP (mittlerweile als XAMPP) bezeichnet, je nachdem ob als Betriebssystem Linux, Mac OS oder Windows benutzt wird.
Einige Webdienste bedienen sich dieser Architektur. Sie betreiben mehrere hundert MySQL-Server, über die die Zugriffe aus dem Netz abgewickelt werden.
MySQL wird in über hundert Produkten als eingebettetes Datenbanksystem eingesetzt. [1]
[Bearbeiten] Geschichte
MySQL ist 1994 zunächst als Clone für mSQL entwickelt worden und deshalb zu diesem voll kompatibel. Die Software wurde sofort unter der Versionsnummer 3.21 veröffentlicht, um zu signalisieren, dass sie auf einem (von Monty entwickelten) 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.
Bereits mit der 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 (noch) nicht implementiert ist.
Mit dem MySQL-Cluster steht außerdem ein Tabellentyp zur Verfügung, bei dem die gesamte Datenbank im Arbeitsspeicher vorgehalten wird. Im Gegenzug unterstützt dieser Datentyp vollständige Replikation zwischen allen Clusterknoten und ebenfalls Transaktionen, aber wiederum keine Volltextsuche.
Die Version 4.1 wurde im Oktober 2004 freigegeben. Sie bietet eine Datenspeicherung in unterschiedlichen Zeichensätzen pro Tabelle an. Es wird unter auch Unicode unterstützt.
Weitere Verbesserungen gegenüber der Version 3.x sind die Funktionen: Union, Subquery
Die Version 5.0 wurde im Oktober 2005 freigegeben. Sie unterstützt alle im SQL3-Standard definierten Objekttypen:
- Datenbank
- Tabelle
- View (neu in Version 5)
- Alias
- Index
- Trigger (neu in Version 5)
- Stored Procedure (neu in Version 5)
- User Defined Function (neu in Version 5)
Die Version 5.1 kann Tabellen partitionieren, ein Plugin-API haben, eine zeilenbasierte Replikation und eine Ereignissteuerung ähnlich der Cronjobs unter UNIX.
Eine Version 5.2 wird als Download für einen Alpha-Test angeboten. (Stand: März 2007) Für diese Version ist eine umfassendere Unterstützung der Fremdschlüssel-Beziehungen angekündigt.
[Bearbeiten] Speicher-Engines
MySQL bietet verschiedene Speicher-Engines für den Zugriff auf die Daten an. Jede einzelne Engine ist für ein spezielles Einsatz-Szenario optimiert. Man kann auch selber eine Speicher-Engine schreiben (Siehe die Engine EXAMPLE) und diese zu den bestehenden hinzufügen oder eine Anwendung ausschließlich mit der eigenen Engine betreiben. [2]
Die Anforderungen eines Datenbanksystems werden nur von der InnoDB-, BDB- und der FEDERATED-Engine erfüllt, da nur diese Engines Transaktionssicherheit gewähren. Genau genommen handelt es sich bei den anderen Engies nicht um Datenbankmanagementsysteme, sondern um Dateiverwaltungssysteme.
[Bearbeiten] MyISAM
MyISAM bietet schnellen Zugriff auf Tabellen und Indices ohne Transaktionssicherung. Weil keine Daten gesperrt werden müssen, können die Zugriffe schneller ausgeführt werden. Wenn Schreib-Zugriffe nur selten und nicht von mehreren Benutzern gleichzeitig ausgeführt werden, dann ist MyISAM eine zuverlässige und sehr performante Speicher-Engine.
[Bearbeiten] InnoDB
InnoDB bietet transaktionssichere Lese- und Schreib-Zugriffe für Tabellen, die den Typ InnoDB haben. Allerdings gibt es hier Einschränkungen. InnoDB bietet ferner die Möglichkeit, Fremdschlüssel-Beziehungen zu überprüfen.
[Bearbeiten] MERGE
MERGE bietet die Möglichkeit, mehrere Tabellen vom Typ MyISAM, die die selbe Struktur haben, zu einer Tabelle zusammenzufassen und die Zugriffe darauf auszuführen.
[Bearbeiten] MEMORY
Management von temporären Tabellen. Die Definition der Tabellen wird auf der Festplatte permanent gespeichert. Die Daten werden im Arbeitsspeicher gespeichert. Bei einem Neustarten des Servers sind die Tabellen-Strukturen noch vorhanden, die Inhalte müssen neu eingelesen werden z.B. aus permanenten Tabellen. Es sind spezielle Verfahren implementiert zur Speicherplatz-Verwaltung, 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.
[Bearbeiten] FEDERATED
Die FEDERATED-Engine bietet transaktionssicheren Zugriff auf Tabellen, die auf einem anderen Server liegen. Wenn man eine Tabelle vom Typ FEDERATED erstellt, dann wird diese auf dem anderen Server erstellt. Der lokale Server verhält sich wie ein Client, der auf den entfernten Server zugreift. Die FEDERATED-Engine verhält sich als 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. Es ist geplant, diese Engine zu erweitern, dass auch auf andere DBMS zugegriffen werden kann.
[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 konzopiert. Es können keine Indices 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, dann 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 Kommas getrennt.
[Bearbeiten] BLACKHOLE
BLACKHOLE wurde dafür designed, 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] Administration
Zur Verwaltung von MySQL-Datenbanken dient der mitgelieferte Kommandozeilen-Client (Kommandos mysql
und mysqladmin
). Als grafische Verwaltungskonsole bietet MySQL AB den MySQL Administrator und zur Visualisierung den MySQL Query Browser an.
Eine von vielen Alternative 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 welchen die einzelnen Kunden keine Rechte haben mysql
und mysqladmin
direkt auszuführen. Zum Erstellen und Verwalten von Backups der Datenbanken auf Webservern wird - wenn keine Rechte für die Ausführung von mysqldump
vorliegen - häufig die ebenfalls in PHP geschriebe Open-Source-Anwendung phpMyBackupPro eingesetzt.
Für ein unterbrechungsfreies System bietet sich die Master/Slave-Replikation an, wobei die Datensicherung auf dem Slave durchgeführt wird.
[Bearbeiten] Cluster-Technik
MySQL wird oft als DBMS im Web-Umfeld eingesetzt. Hier kommt es darauf an, dass viele Lesezugriffe schnell ausgeführt werden. Das aktuelle Cluster-Konzept von MySQL ist für ein Computercluster ausgerichtet, das in einer Shared Nothing Architecture aufgebaut ist. Das bedeutet, dass jeder Rechner-Knoten seine eigenen Festplatten und Arbeitsspeicher hat. Wenn die einzelnen Rechner-Knoten mit einem genügend großen Arbeitsspeicher ausgestattet sind, dann können alle Daten im Arbeitsspeicher gehalten werden. Bei mehreren Tests hat MySQL für solche Anforderungen schon bessere Zugriffszeiten bewiesen, als Oracle und DB2.
Bei der aktuellen Cluster-Technik sind Schreibzugriffe mit einem großen Overhead verbunden.
MySQL hat ein Cluster-Konzept angekündigt, bei dem alle Knoten auf die selben Festplatten zugreifen. Die Schreib-Zugriffe sollten dadurch schneller werden.
Nach eigenen Angaben bietet die Cluster-Technologie von MySQL eine 99,999 %ige Verfügbarkeit. [3] [4] Das bedeutet eine jährliche Ausfallzeit von weniger als 6 Minuten.
[Bearbeiten] Support-Angebote
MySQL AB bietet Support-Lizenzen für vier Leistungsstufen an, die sich im Leistungsumfang und im Preis unterscheiden: MySQL Enterprise Basic, Silver, Gold und Platinum
Folgende Leistungen werden durch die Lizenzverträge zugesagt:
- Monatliche Updates
- Beratungsunterstützung
- Unterstützung zur Problemlösung
- Haftungsfreistellung vor Schadensersatzansprüchen Dritter
[Bearbeiten] Literatur
- Jeremy D. Zawodny, Derek J. Balling: MySQL High Performance O'Reilly 2004, ISBN 0-5960-0306-4
- Matthias Kannengießer: PHP 5 / MySQL 4, Studienausgabe. Franzis, überarb. u. erw. Aufl. 2005, ISBN 3-7723-7005-5
- Michael Kofler: MySQL. Einführung, Programmierung, Referenz. Programmer's Choice. 3., überarb. u. erw. Aufl. 2005, ISBN 3-8273-2253-7
- Axel Bornträger: MYSQL 4 – echt einfach. Franzis, 2004, ISBN 3-7723-6137-4
- Matthias Kannengießer: MYSQL – Praxisbuch. Franzis, 2003, ISBN 3-7723-7500-6
- 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
[Bearbeiten] Siehe auch
- PostgreSQL eine freie objektrelationale Datenbank
- Firebird eine relationale Open-Source Datenbank von der Firma Borland
- HeidiSQL, Open-Source-client für MySQL (unter Windows)
- MySQL AB, schwedische Firma, die die Weiterentwicklung und den Vertrieb von MySQL und MaxDB steuert.
[Bearbeiten] Weblinks
- MySQL AB - offizielle Website (MySQL Deutschland)
- MySQL Forge – offizielle Community-Website
- MySQL-Referenzhandbuch