Wichtig: Bitte konvertieren Sie keine Systemtabellen von MySQL
in der mysql-Datenbank (wie etwa
user oder host) in den Typ
InnoDB. Diese Operation wird nicht
unterstützt. Die Systemtabellen müssen immer den Typ
MyISAM haben.
Wenn Sie alle Tabellen (außer den Systemtabellen) als
InnoDB-Tabellen anlegen möchten, fügen Sie
einfach die Zeile
default-storage-engine=innodb in den
[mysqld]-Abschnitt Ihrer Serveroptionsdatei
ein.
InnoDB kennt im Gegensatz zu
MyISAM keine spezielle Optimierung für eine
separate Indexerstellung. Daher lohnt es sich nicht, zuerst die
Tabellen zu exportieren und importieren und danach die Indizes
anzulegen. Der schnellste Weg, eine Tabelle in
InnoDB zu ändern, besteht darin, die
Einfügeoperationen direkt auf der
InnoDB-Tabelle vorzunehmen. Verwenden Sie
also ALTER TABLE … ENGINE=INNODB oder
erzeugen Sie eine leere InnoDB-Tabelle mit
denselben Definitionen und fügen Sie darin die Zeilen mit
INSERT INTO … SELECT * FROM …
ein.
Wenn Sie UNIQUE-Constraints auf
Sekundärschlüsseln haben, können Sie einen Tabellenimport
beschleunigen, indem Sie die Eindeutigkeitsprüfungen während
der Importoperation vorübergehend abschalten:
SET UNIQUE_CHECKS=0;
... import operation ...
SET UNIQUE_CHECKS=1;
Bei großen Tabellen spart das eine Menge Festplattenzugriffe,
da InnoDB dann seinen Insert-Puffer nutzen
kann, um die Sekundärindexeinträge in einer Batch-Operation zu
schreiben.
Um eine bessere Kontrolle über den Einfügungsprozess zu haben, ist es manchmal besser, Daten einer großen Tabelle in Stücken einzufügen:
INSERT INTO newtable SELECT * FROM oldtable WHERE yourkey > something AND yourkey <= somethingelse;
Wenn alle Datensätze eingefügt wurden, können Sie die Tabellen umbenennen.
Während der Konvertierung großer Tabellen sollten Sie den
InnoDB-Bufferpool vergrößern, damit weniger
Plattenzugriffe erforderlich sind. Reservieren Sie jedoch nicht
mehr als 80% des physikalischen Arbeitsspeichers. Sie können
auch die InnoDB-Logdateien vergrößern.
Achten Sie darauf, dass der Tablespace nicht vollläuft:
InnoDB-Tabellen brauchen auf der Festplatte
viel mehr Speicherplatz als MyISAM-Tabellen.
Wenn einer ALTER TABLE-Operation der Platz
ausgeht, startet sie ein Rollback, und das kann Stunden dauern,
wenn es an die Festplatte gebunden ist. Bei Inserts nutzt
InnoDB den Insert-Puffer, um
Sekundärindexeinträge in Batches mit dem Index
zusammenzuführen. Das spart viele Schreiboperationen auf der
Festplatte. Da für den Rollback kein solcher Mechanismus
existiert, kann dieser 30-mal länger als die
Einfügeoperationen dauern.
Wenn ein Rollback-Prozess außer Kontrolle gerät und Sie keine
wertvollen Daten in Ihrer Datenbank haben, ist es manchmal
ratsam, den Datenbankprozess anzuhalten, anstatt Millionen von
Lese/Schreiboperationen auf der Festplatte abzuwarten. Den
gesamten Vorgang können Sie unter
Abschnitt 14.2.8.1, „Erzwingen einer InnoDB-Wiederherstellung (Recovery)“ nachlesen.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.
