Sie müssen mit innodb_file_per_table gehen und Sie müssen einige wie Reinigung mit der aktuellen Infrastruktur von InnoDB tun.
Ich habe gesehen, dass viele DB-Hosting-Clients MySQL eingerichtet haben und InnoDB in seinem Standardzustand belassen. Dies führt dazu, dass der Systemtabellenbereich (besser bekannt als ibdata1) stark wächst.
Auch wenn Sie zu innodb_file_per_table gewechselt haben, müsste die .ibd-Datei aus ibdata1 extrahiert werden, und ibdata wird niemals verkleinert. Wenn Sie beispielsweise eine Tabelle mit dem Namen mydb.mytable in ibdata1 haben, die 2 GB belegt, müssen Sie Folgendes ausführen, um sie zu extrahieren:
SCHRITT 01) Fügen Sie dies zu /etc/my.cnf hinzu
[mysqld]
innodb_file_per_table
SCHRITT 02) service mysql restart
SCHRITT 03) ALTER TABLE mydb.mytable ENGINE=InnoDB;
Dadurch wird die Datei /var/lib/mysql/mydb/mytable.ibd erstellt
Leider können die 2 GB Speicherplatz, die vor der Änderung von der Tabelle belegt wurden, nicht zurückgefordert werden. Ich habe in früheren Beiträgen darüber geschrieben, wie und warum die Infrastruktur von InnoDB bereinigt werden soll:
Vergessen Sie nicht, innodb_open_files (Standard 300) zu erhöhen, sobald Sie diese wichtige Änderung vorgenommen haben . Andernfalls ist der Festplattenzugriff sehr eingeschränkt.
Stellen Sie in Bezug auf Verknüpfungen sicher, dass Sie über geeignete Indizes verfügen, die die Verknüpfungskriterien unterstützen.
UPDATE 2012-04-02 11:30 EDT
Die Verwendung von innodb_file_per_table in einer neuen Installation führt dazu, dass ibdata1 sehr langsam wächst, da alle DDLs außerhalb von ibdata ausgeführt werden. Sie können jede InnoDB-Tabelle wie oben erwähnt wie folgt verkleinern:
ALTER TABLE mydb.mytable ENGINE=InnoDB;
UPDATE 2012-04-02 16:50 EDT
Seien Sie beim Erstellen von Sicherungskopien äußerst vorsichtig .ibd-Dateien. Warum?
In jeder .ibd-Datei befindet sich ein spezieller Wert, der als tablespace_id bezeichnet wird. In ibdata1 befindet sich eine Liste der Werte für tablespace_id. Wenn Sie jemals eine Tabellenpflege durchführen, bei der die Tabelle gelöscht und neu erstellt werden muss, ändert sich die Tablespace-ID. Das Erstellen einer Kopie einer solchen .ibd-Datei kann nur dann in die Datenbank zurückgespielt werden, wenn Sie auch eine Kopie von ibdata1 erstellen. Dies gefährdet die tablespace_id aller anderen InnoDB-Tabellen. In Anbetracht dessen ist es vorzuziehen, dass Sie mysqldump-Sicherungen durchführen, da mysqldumps logische Kopien der Daten sind. Mit anderen Worten, das Backup ist unabhängig vom Zeitpunkt der ibdata1 und Sie können ohne Bedienungsprobleme neu laden.