Anda harus menggunakan innodb_file_per_table dan Anda perlu melakukan beberapa cara pembersihan dengan infrastruktur InnoDB saat ini.
Saya telah melihat banyak klien hosting DB yang mengatur MySQL dan membiarkan InnoDB dalam keadaan default. Ini menyebabkan tablespace sistem (lebih dikenal sebagai ibdata1) tumbuh liar.
Bahkan jika Anda beralih ke innodb_file_per_table, file .ibd harus diekstraksi dari ibdata1 dan ibdata tidak akan pernah menyusut. Misalnya, jika Anda memiliki tabel bernama mydb.mytable yang ada di dalam ibdata1 yang menghabiskan 2GB, untuk mengekstraknya Anda harus melakukan hal berikut:
LANGKAH 01) Tambahkan ini ke /etc/my.cnf
[mysqld]
innodb_file_per_table
LANGKAH 02) service mysql restart
LANGKAH 03) ALTER TABLE mydb.mytable ENGINE=InnoDB;
Itu akan membuat file /var/lib/mysql/mydb/mytable.ibd
Sayangnya, 2GB ruang yang ditempati oleh tabel sebelum perubahan tidak dapat direklamasi. Saya menulis posting sebelumnya tentang bagaimana dan mengapa membersihkan infrastruktur InnoDB:
Setelah Anda melakukan perubahan besar ini, jangan lupa untuk meningkatkan innodb_open_files (default 300) . Kalau tidak, akses disk sangat terbatas.
Sehubungan dengan bergabung, pastikan Anda memiliki indeks yang tepat yang mendukung kriteria bergabung.
UPDATE 2012-04-02 11:30 EDT
Menggunakan innodb_file_per_table di installattion baru menyebabkan ibdata1 tumbuh sangat lambat karena semua DDL dilakukan di luar ibdata. Anda dapat mengecilkan tabel InnoDB apa pun seperti yang saya sebutkan sebelumnya seperti ini:
ALTER TABLE mydb.mytable ENGINE=InnoDB;
UPDATE 2012-04-02 16:50 EDT
Ketika datang ke backup, berhati-hatilah membuat salinan file .ibd. Mengapa?
Di dalam setiap file .ibd adalah nilai khusus yang dikenal sebagai tablespace_id. Ada daftar nilai tablespace_id di ibdata1. Jika Anda pernah melakukan pemeliharaan tabel yang mengharuskan menjatuhkan dan membuat ulang tabel, tablespace_id akan menjadi berbeda. Membuat salinan file .ibd tersebut hanya dapat diintegrasikan kembali ke dalam database untuk digunakan jika Anda juga membuat salinan ibdata1. Itu membahayakan tablespace_id dari semua tabel InnoDB lainnya. Sehubungan dengan hal ini, Anda sebaiknya melakukan backup mysqldump karena mysqldumps adalah salinan logis dari data. Dengan kata lain, cadangan tidak tergantung pada titik-waktu ibdata1 dan Anda bebas memuat ulang tanpa masalah pengoperasian.