Yang ibdata1
tidak menyusut adalah fitur MySQL yang sangat mengganggu. The ibdata1
file tidak dapat benar-benar akan menyusut kecuali Anda menghapus semua database, menghapus file dan kembali dump.
Tetapi Anda dapat mengkonfigurasi MySQL sehingga setiap tabel, termasuk indeksnya, disimpan sebagai file terpisah. Dengan cara ibdata1
itu tidak akan tumbuh besar. Menurut komentar Bill Karwin, ini diaktifkan secara default pada versi 5.6.6 dari MySQL.
Beberapa waktu yang lalu saya melakukan ini. Namun, untuk mengatur server Anda untuk menggunakan file terpisah untuk setiap tabel Anda perlu mengubah my.cnf
untuk mengaktifkan ini:
[mysqld]
innodb_file_per_table=1
http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html
Karena Anda ingin mendapatkan kembali ruang dari ibdata1
Anda sebenarnya harus menghapus file:
- Lakukan
mysqldump
dari semua basis data, prosedur, pemicu dll kecuali mysql
dan performance_schema
basis data
- Hapus semua basis data kecuali 2 basis data di atas
- Hentikan mysql
- Hapus
ibdata1
dan ib_log
file
- Mulai mysql
- Kembalikan dari dump
Ketika Anda memulai MySQL pada langkah 5 ibdata1
dan ib_log
file akan dibuat kembali.
Sekarang Anda siap untuk pergi. Saat Anda membuat database baru untuk analisis, tabel akan ditempatkan di ibd*
file terpisah , bukan di ibdata1
. Karena Anda biasanya menjatuhkan basis data segera setelahnya, ibd*
file - file tersebut akan dihapus.
http://dev.mysql.com/doc/refman/5.1/en/drop-database.html
Anda mungkin telah melihat ini:
http://bugs.mysql.com/bug.php?id=1341
Dengan menggunakan perintah ALTER TABLE <tablename> ENGINE=innodb
atau OPTIMIZE TABLE <tablename>
satu dapat mengekstrak data dan indeks halaman dari ibdata1 ke file terpisah. Namun, ibdata1 tidak akan menyusut kecuali Anda melakukan langkah-langkah di atas.
Mengenai itu information_schema
, itu tidak perlu atau tidak mungkin untuk jatuh. Ini sebenarnya hanya sekelompok tampilan read-only, bukan tabel. Dan tidak ada file yang terkait dengan mereka, bahkan direktori basis data. The informations_schema
menggunakan memori db-mesin dan dijatuhkan dan regenerasi pada stop / restart mysqld. Lihat https://dev.mysql.com/doc/refman/5.7/en/information-schema.html .