Sie können jede InnoDB
-Tabelle und ihre
Indizes in ihrer eigenen Datei speichern. Dieses Feature nennt
man „Multi-Tablespaces“ da im Endeffekt jede
Tabelle ihren eigenen Tablespace bekommt.
Multi-Tablespaces sind praktisch für Benutzer, die bestimmte
Tabellen auf separate physikalische Platten verlagern oder
Backups einzelner Tabellen rasch wiederherstellen möchten, ohne
die Arbeit mit den übrigen InnoDB
-Tabellen
zu unterbrechen.
Aktivieren Sie Multi-Tablespaces mit folgender Zeile im
[mysqld]
-Abschnitt von
my.cnf
:
[mysqld] innodb_file_per_table
Nach dem Server-Neustart speichert InnoDB
jede neu erzeugte Tabelle in einer eigenen Datei
in
dem Datenbankverzeichnis, zu dem die Tabelle gehört. Das
ähnelt dem Vorgehen der
tbl_name
.ibdMyISAM
-Speicher-Engine, doch diese spaltet
die Tabellen in eine Datendatei
und
eine Indexdatei
tbl_name
.MYD
.
Mit tbl_name
.MYIInnoDB
werden Daten und Indizes gemeinsam
in der.ibd
-Datei gespeichert. Die
-Datei
wird wie üblich angelegt.
tbl_name
.frm
Wenn Sie die innodb_file_per_table
-Zeile aus
my.cnf
löschen und den Server neu starten,
erzeugt InnoDB
die Tabellen wieder in Shared
Tablespace-Dateien.
innodb_file_per_table
wirkt sich nur auf eine
einzelne Tabellenerzeugung aus, und beeinflusst nicht den
Zugriff auf bestehende Tabellen. Wenn Sie den Server mit dieser
Option starten, werden neue Tabellen mit
.ibd
-Dateien angelegt, aber alte liegen
immer noch im Shared Tablespace. Entfernen Sie die Option wieder
und starten dann den Server neu, werden die neuen Tabellen im
Shared Tablespace angelegt, aber Tabellen, die mit
Multi-Tablespaces angelegt wurden, bleiben weiterhin
zugänglich.
InnoDB
benötigt immer den Shared Tablespace,
da es sein internes Data Dictionary und seine Undo-Logs dort
speichert. Die .ibd
-Dateien reichen
InnoDB
zum Funktionieren nicht aus.
Hinweis: Sie können
.ibd
-Dateien nicht wie
MyISAM
-Tabellendateien nach Belieben zwischen
Datenbankverzeichnissen hin- und herschieben, weil die im Shared
Tablespace von InnoDB
gespeicherte
Tabellendefinition den Datenbanknamen enthält und weil
InnoDB
die Konsistenz von Transaktions-IDs
und Lognummern beibehalten muss.
Um eine .ibd
-Datei und die zugehörige
Tabelle von einer Datenbank in eine andere zu verlagern,
verwenden Sie eine RENAME TABLE
-Anweisung:
RENAME TABLEdb1.tbl_name
TOdb2.tbl_name
;
Wenn Sie über ein „sauberes“ Backup einer
.ibd
-Datei verfügen, können Sie diese in
ihrer angestammten MySQL-Installation folgendermaßen
wiederherstellen:
Geben Sie folgende ALTER TABLE
-Anweisung:
ALTER TABLE tbl_name
DISCARD TABLESPACE;
Vorsicht: Diese Anweisung
löscht die aktuelle .ibd
-Datei.
Speichern Sie die .ibd
-Backup-Datei
zurück in das richtige Datenbankverzeichnis.
Geben Sie folgende ALTER TABLE
-Anweisung:
ALTER TABLE tbl_name
IMPORT TABLESPACE;
Ein „sauberes“ Backup einer
.ibd
-Datei bedeutet in diesem Zusammenhang:
Keine schwebenden Transaktionen in der
.ibd
-Datei.
Keine noch nicht zusammengeführten Insert-Puffer-Einträge
in der .ibd
-Datei.
Purge hat alle zum Löschen vorgemerkten Indexeinträge aus
der .ibd
-Datei entfernt.
mysqld hat alle geänderten Seiten der
.ibd
-Datei aus dem Bufferpool in die
Datei zurückgeschrieben.
Mit folgender Methode können Sie eine saubere
.ibd
-Backup-Datei anlegen:
Beenden Sie alle Aktivitäten des mysqld-Servers und schreiben Sie alle Transaktionen fest.
Warten Sie, bis SHOW ENGINE INNODB STATUS
anzeigt, dass keine Transaktionen mehr in der Datenbank
aktiv sind und der Status des Haupt-Threads von
InnoDB
den Wert Waiting for
server activity
angenommen hat. Dann können Sie
die .ibd
-Datei kopieren.
Eine andere Möglichkeit, an eine saubere Kopie einer
.ibd
-Datei zu kommen, ist die Verwendung
eines kommerziellen InnoDB Hot Backup-Tools:
Legen Sie mit InnoDB Hot Backup ein
Backup der InnoDB
-Installation an.
Starten Sie einen zweiten mysqld-Server
auf dem Backup und lassen Sie ihn die
.ibd
-Dateien im Backup säubern.
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.