HTMLWorld - HTML, CSS, JavaScript, PHP, Java, Flash und vieles mehrHTMLWorld:   Home | Impressum |
 

 
 

Anzeige 
 
               Forum
 
 
HTMLWorld » MySQL » Neuerungen mit MySQL 6

MySQL: Neuerungen mit MySQL 6

von Michael Stöckel

Mittlerweile gibt es die ersten Testversionen des MySQL-Servers in der Version 6 zum Download. Es ist, wie man es von MySQL AB kennt, üblich, in einer neuen Hauptversion üblich, eine große Anzahl von Fehlern mit unterschiedlicher Priorität zu beseitigen und neue Features hinzuzufügen. In diesem Zusammenhang ist die neue Storage Engine Falcon von Bedeutung. Ein großer Nachteil ist während der Entwicklung, dass die Dokumentation oft überarbeitet wird und in wenigen Sprachen zur Verfügung steht.

Anzeige

Neue Features in MySQL 6  nach oben

Neue Zeichensätze

In der neuen Version sollen weitere Unicode-Zeichensätze unterstützt werden. Konkret handelt es sich um die Varianten UTF-16, UTF-32 und UTF-8 in der 4 Byte-Version.

Information_Schema - Datenbank

Zum einen wurde der Datenbank eine neue Tabelle mit der Bezeichnung "PARAMETERS" hinzugefügt. Diese Tabelle enthält Informationen zu den Parametern von integrierten Funktionen und Prozeduren sowie deren Rückgabewerten.
Für die bereits vorhandene Tabelle "ROUTINES" wurden neue Spalten hinzugefügt. Die Spalten heißen im einzelnen "Data_Type", "Character_Maximum_Length", "Character Octet_Length", "Numeric_Precision", "Numeric_Scale", "Character_Set_Name" und "Collation_Name". Alle Spalten enthalten Informationen über die Datentypen, die Rückgabewerte von gespeicherten Funktionen annehmen können.

Subqueries und Joins

Der Optimizer für diese SQL-Abfragen wird verbessert. Ein neues Feature ist der skript-basierten Index-Zugriff auf Tabellenreihen für Teile nicht zusammenhängender Bereiche in der MyISAM- und InnoDB-Storage Engine.

Reset Slave-Kommando

Der Einsatz dieses Kommandos ändert in der neuen Version keine Parameter für die Verbindung zwischen Master und Slave bei einer Server-Replikation. Sie werden auf die Werte, die auf der Kommandozeile festgelegt wurden, zurückgesetzt.

Lock Table - Syntax

Die Syntax zum Sperren von Tabellen wurde erweitert. Man kann zum einen Sperren per Transaktionen für Tabellen vergeben, die keine Transaktionen automatisch ausführen. Mit den neuen Kommandos "LOCK TABLES … IN SHARE MODE" oder als Alternative "LOCK TABLES … IN EXCLUSIVE MODE" können auch Tabellen angesprochen werden, die im Lock Tables-Statement nicht direkt angesprochen werden. Wenn die beiden Zusätze "IN SHARE MODE" oder "IN EXCLUSIVE MODE" verwendet werden, werden die betreffenden Tabellen erst dann wieder freigeschaltet, wenn die Transaktion beendet ist.
Das ursprüngliche LOCK TABLES-Statement bleibt in der neuen Version unverändert.

Erweiterte XML-Funktionalität

Mit dem neuen "LOAD XML"-Statement werden Daten aus einer XML-Datei in eine Datenbanktabelle gelesen. In diesem Zusammenhang werden drei verschiedene XML-Strukturen unterstützt.
In einer Strukturversion befinden sich alle Informationen zur Spalte und zum Inhalt als Attribute in einem XML-Tag:

<row column1="value1" column2="value2" .../>

In einer anderen XML-Version entsprechen die Spaltennamen eigenen XML-Tags und die Spalteninhalte sind gleichzeitig der Inhalt der XML-Tags. Beispiel:

<row>
  <column1>value1</column1>
  <column2>value2</column2>
</row>

In der dritten XML-Variante wird eine Tabellenreihe (= Datensatz) mittels field-Tags angesprochen. Der Spaltenname ist der Wert des Attributes "name" und der Inhalt der Spalten entspricht dem Inhalt der field-Tags. Beispiel:

<row>
  <field name="column1">value1</field>
  <field name="column2">value2</field>
</row>

Alle drei Formate können innerhalb einer XML-Datei verwendet werden. Die Routine, auf der das LOAD XML-Kommando beruht, interpretiert das jeweilige Format automatisch und liest die Daten entsprechend in die Tabelle ein. Die folgende Zeile zeigt ein einfaches Beispiel zur Anwendung des Kommandos:
LOAD XML INFILE "test.xml" INTO TABLE db_name.tbl_name
Eine Besonderheit ist das Exportieren von Daten in eine XML-Datei. Zu diesem Zweck muß der MySQL-Client mit der Option -xml gestartet werden. Dann kann z. B. mit
mysql --xml -e 'SELECT * FROM tbl_name' > test.xml
eine Tabelle in eine XML-Datei exportiert werden.

Ausführliche Kommentare

Die Unterstützung von ausführlichen / erweiterten Kommentaren für Tabellen, Spalten und Indizes wird in der neuen Version dabei sein.

Neue Storage Engine Falcon

In der neuen MySQL-Version wird es eine weitere Storage Engine für das Anlegen von Tabellen geben. Bisher war "InnoDB" das einzige transaktionsfähige Backend im MySQL-Server. Nachdem die Firma, die "InnoDB" entwickelte, von Oracle aufgekauft wurde, entschied sich MySQL AB ein eigenes transaktionsfähiges Backend zu entwickeln. Mit der neuen Storage Engine "Falcon" können Tabellen mit dem Attribut "engine=falcon" angelegt werden.
Diese neue Storage Engine ist gleichzeitig die wichtigste Neuerung im neuen MySQL-Server.

Mit neuer Storage Engine beseitigte Fehler

Mit der neuen Storage Engine "Falcon" sollen in der neuen Server-Version nach aktuellem Stand insgesamt 40 Fehler beseitigt werden. Im folgenden Abschnitt werden einige der wichtigsten der beseitigten Fehler beschrieben:
Wenn Informationen über ein "INSERT INTO ... SELECT FROM"-Statement in eine Tabelle eingetragen werden sollen, konnte dieser Vorgang bei großen Datenmengen zu einem Absturz des Servers führen. Ein weiterer Absturzgrund war das gleichzeitige Hinzufügen von Informationen von verschiedenen Verbindungen in den gleichen Datensatz. In diesem Zusammenhang wurden pauschal weitere Unregelmäßigkeiten, die bei diesem Vorgang auftreten können, beseitigt. Eine dieser Unregelmäßigkeiten war der plötzliche Abbruch des Vorgangs. Zwei weitere Gründe für den Absturz des Servers war ein ALTER TABLE-Vorgang im Zusammenhang mit Interleaving Transactions und ein UPDATE-Prozeß auf BLOB-Spalten.
Der Einsatz des Datentyps DECIMAL mit 19 Stellen hat zur Erzeugung von falschen Werten geführt. Weiterhin konnte das Löschen von großen Datenmengen zu einem Abbruch des Vorgangs führen und ein SELECT … FOR UPDATE und ROLLBACK kann einen Server in eine Endlosschleife verleiten.

Neuigkeiten für den MySQL-Cluster (Replika)  nach oben

Konflikt-Findung und Lösung

In der Version 6 soll es die sog. MySQL Cluster Replication Conflict Resolution and Detection geben. Dies ist ein Feature zum Entdecken von Konflikten innerhalb einer MySQL-Replika. Weiterhin soll mit diesem Feature auch eine Lösung für den Konflikt angeboten werden. Konkret soll dies so funktionieren, dass für eine Tabelle im Slave-Server der Administrator in einer zusätzlichen Spalte einen Zeitstempel festlegen kann, ob die Tabelle bzw. die dazugehörige Spalte von einem bestimmten Master aktualisiert werden darf. Wenn jetzt ein Konflikt auftritt, soll es unterschiedliche Methoden geben, diese Zeitstempel miteinander zu vergleichen.
Zur Nutzung dieses Features müssen sowohl beim Master als auch beim Slave Vorbereitungen getroffen werden. Beim Master müssen die Binlog-Dateien geschrieben werden, um herauszufinden, welche Spalten überhaupt zum Slave geschickt werden. Damit die Informationen überhaupt in diese Protokolldateien geschrieben werden, muß der Serverdaemon mit der Option " --ndb-log-updated-only " gestartet werden. Beim Slave-Server muß der Administrator in der mysql.ndb_replication-Systemtabelle auf Tabellenbasis angeben, welche Variante der Konfliktlösung genutzt werden soll. Dazu stehen ihm die Alternativen "latest timestamp wins" und "same timestamp wins" oder "none" zur Verfügung.

Online-Kommandos für CREATE and DROP

Für die bekannten Operationen "ADD COLUMN", "ADD INDEX" und "DROP INDEX", die alle unter das Kommando "ALTER TABLE" fallen, werden die neuen Schlüsselwörter ONLINE und OFFLINE eingeführt. Wenn das Schlüsselwort ONLINE verwendet werden soll, darf dies nur bei Tabellen des Typs "MyISAM", "FALCON" und "NDB" geschehen. Aktuell bringt die Verwendung des neuen Schlüsselwortes einige Einschränkungen mit sich.

  • Die Tabelle, die verändert werden soll, muss einen expliziten - keinen versteckten - Primary Key haben.
  • Wenn Spalten hinzugefügt werden, muss es möglich sein diese mit dem Zusatz "COLUMN_FORMAT DYNAMIC" anzulegen.
  • Der Standardwert der neuen Spalte muss zwangsläufig "null" sein. Eine Alternative ist nicht möglich.

Möglichkeit zu zusammengefassten Operationen

Es soll die Option geben, mehrere Kommandos unter einem Namen (= Skript) zusammen zu fassen. Dies soll zu einer Verbesserung der Geschwindigkeit im Cluster führen. Dazu wird die neue Option "-slave-allow-batching" eingeführt, mit der der Datenbankserver gestartet werden muss.

Real Time-Entdeckung von schwerwiegenden Replikationsfehlern

Für das bereits zur Verfügung stehende Kommando "CHANGE MASTER TO …" wird die neue Option "MASTER_HEARTBEAT_OPTION" eingeführt. Weiterhin gibt es dafür die neuen Konfigurationsvariablen "Slave_hearbeat_period" und "Slave_received_heartbeats". Der Zeitraum für die neue Option muss in Sekunden angegeben werden und legt die Periode zwischen zwei Heartbeats bei der Replikation fest. Die Heartbeat-Botschaften werden dabei vom Master gesendet.

Bindung an eine bestimmte IP-Adresse

Mit der Version 6 soll es durch die neue Option "-bind-address" für den Slave-Server möglich sein, dass die Operationen zur Administration nur von einer bestimmten IP-Adresse ausgeführt werden dürfen. Die Option muss beim Start des Serverdaemons mit angegeben werden.

Bindung von Prozessen an bestimmte Prozessoren

Wenn der Replika-Server auf einem Host mit mehreren CPU's läuft, gibt es in der neuen Version einige Verbesserungen in der Performance bei der Nutzung dieses Features. Mit diesem Feature ist es möglich, bestimmte Serverprozesse an bestimmte CPU's zu binden.

Neues Interface für die NDB-API

Für die API der NDB-Storage Engine wurde das neue Interface "NdbRecord" eingeführt. Dieses Interface stellt eine Umwandlung für einen kompletten oder teilweisen Speicher in der NDB-Engine zur Verfügung. "NdbRecord" hat keine eigenen API-Methoden. Es kann zur Unterstützung beim Zugriff auf API-Methoden, die für die folgenden Operationen benötigt werden, verwendet werden: Auslesen von unique und primary keys, Tabellen- und Index-scans, DML Operationen mit unique keys oder primary keys. Die identische Instanz für das Interface kann gleichzeitig in verschiedenen Operationen oder Transaktionen verwendet werden.

Weitere neue Features für die Replikation

Neben der Anzeige für den aktuellen Status des Serverbackups gibt es weiterhin noch eine neue Option für den Daemon des Datenbankservers. Mit der Option "-ndb-cluster-connection-pool" werden mehrere Cluster-Verbindungen gleichzeitig für einen Server ermöglicht.

Nicht mehr vorhandene Features  nach oben

In der Version 6 werden verschiedene Kommandos und Features nicht mehr zur Verfügung stehen. Es wird bereits darauf hingewiesen, dass Programmierer und Administratoren von Applikationen sich darauf einstellen und Alternativen entwickeln müssen. Zum Zeitpunkt der Erstellung des Artikels gibt es nur für einen Teil andere Möglichkeiten auf MySQL-Ebene.

  • Die Systemvariable "table_type" ist abgeschafft. Stattdessen soll die Variable "storage_engine " verwendet werden.
  • Zu Angabe der Storage Engine beim Anlegen von neuen Tabellen wird die bisherige "TYPE"-Option in "ENGINE" umbenannt.
  • Das SQL-Statement "SHOW TABLE TYPES" gibt es ebenfalls nicht mehr. Die Alternative dazu lautet "SHOW ENGINES".
  • Die Systemvariable "log_bin_trust_routine_creators" ist in der neuen Version nicht mehr vorhanden. Die neue Variable "log_bin_trust_function_creators" übernimmt deren Aufgaben.
  • Bei dem TIMESTAMP(N)-Kommando ist bei der Festlegung einer Breite der Anzeige das N nicht mehr erforderlich.
  • Das neue SQL-Statement "SHOW ENGINE INNODB STATUS" ersetzt die beiden bisherigen Kommandos "SHOW INNODB STATUS" und "SHOW MUTEX STATUS".
  • Die SQL-Kommandos "LOAD TABLE ... FROM MASTER" und "LOAD DATA FROM MASTER" sind in der neuen Version ersatzlos gestrichen.
  • Das bekannte "SHOW PLUGIN"-Statement wird in "SHOW PLUGINS" umbenannt.
  • Die bisher genutzten Statements "BACKUP TABLE" und "RESTORE TABLE" sind ohne Ersatz gestrichen.
  • Um die Parameter für die Replika zu setzen war bisher die Option -master-xxx notwendig. In der Version 6 muss dazu das SQL-Statement "CHANGE MASTER" verwendet werden.

Informationen zum Update auf die neue Version  nach oben

MySQL AB selbst empfiehlt, immer von der unmittelbaren Vorgängerversion des Servers auf die geplante neue Version ein Update durchzuführen. Das bedeutet bei einem Update auf die Version 6.0, dass dies nur von der zum Zeitpunkt der Erstellung des Artikels aktuellen Version 5.1 durchgeführt werden sollte.

Schritte zur Vorbereitung

Zum einen sollten alle Datenbanken inkl. der mysql-Datenbnk gesichert werden, damit beim Update keine Daten verloren gehen bzw. die Zugriffsrechte der User auf den Datenbankserver erhalten bleiben. Weiterhin sollte, falls eine MySQL-Version, die kleiner als 5.1 ist, im Einsatz ist, sollte zuerst schrittweise auf 5.1 aktualisiert werden, bevor ein Update auf 6.0 durchgeführt wird. Weiterhin sollte man Bescheid wissen, welche Änderungen in der Version 6.0 eingebaut wurden, die nicht kompatibel zu älteren Versionen sind.
Ansonsten gibt es beim Update auf die Version 6.0 keine bedeutenden Neuheiten, die beachtet werden müssen.

Inkompatible Änderungen in der neuen Version

In der neuen Version gibt es die "dtoa"-Library, die für die Umwandlung von Strings und Nummern sorgt. Diese Umwandlung ist bisher auch möglich, nur regelt die Bibliothek das Verfahren neu, wodurch nach dem Update andere Resultate entstehen können. Eine Alternative ist in der neuen Version nicht möglich.
Im Zusammenhang mit den neuen Unicode-Datensätzen verringert sich u.a. die maximale Länge in UTF-8-Spalten in der neuen Version. Dies geschieht bei den Datentypen VARCHAR und TEXT. Weiterhin verringert sich die maximale Zeichenanzahl für die Indizierung in diesen Spaltentypen.
In der neuen Version ist das DROP TABLE-Kommando nur dann möglich, wenn eine Schreibsperre auf die Tabelle gesetzt wurde, wenn keine Sperren gesetzt sind oder wenn es sich um eine temporäre Tabelle handelt.

Schritte im Zusammenhang mit dem Update

Zuerst muss die Tabelle "event" in der mysql-Datenbank gesichert werden. Dies geschieht durch das Kommando:
mysqldump -u username -p passwort event > event.sql

Nach dem Update muss die Sicherung wieder eingespielt werden. Dafür ist das Kommando
mysql -u username -p passwort < event.sql
notwendig. Um die Konsistenz der Tabellen nach dem Update zu überprüfen, sollte auf jeden Fall das Kommando mysql_upgrade ausgeführt werden. Ein Beispiel für den Aufruf des Kommandos lautet:
mysql_upgrade -u username -p passwort
Dieses Kommando überprüft die Tabellen und repariert sie gleichzeitig, wenn ein Fehler gefunden wurde.

Hinweis: Das mysql_upgrade-Kommando bietet keine 100-prozentige Zuverlässigkeit, dass alle Fehler gefunden und beseitigt werden.



« zurück weiter »
Bewerten

 

MySQL

.Autor:Jan Winkler.
. Bewertung:
MySQL: Neuerungen mit MySQL 6 HTMLWorld
(5/5 bei 1 Votes)
.
. Community: 91 Beiträge im MySQL Forum .

Navigation


 
     
 

Anzeige