ibdata1
. itu tidak menyusut adalah fitur MySQL yang sangat mengganggu. ibdata1
file tidak dapat benar-benar menyusut kecuali Anda menghapus semua database, menghapus file, dan memuat ulang dump.
Tetapi Anda dapat mengonfigurasi MySQL sehingga setiap tabel, termasuk indeksnya, disimpan sebagai file terpisah. Dengan cara itu ibdata1
tidak akan tumbuh besar. Menurut komentar Bill Karwin ini diaktifkan secara default pada MySQL versi 5.6.6.
Itu beberapa waktu yang lalu saya melakukan ini. Namun, untuk menyiapkan server Anda agar menggunakan file terpisah untuk setiap tabel, Anda perlu mengubah my.cnf
untuk mengaktifkan ini:
[mysqld]
innodb_file_per_table=1
https://dev.mysql .com/doc/refman/5.6/en/innodb-file-per-table-tablespaces.html
Saat Anda ingin merebut kembali ruang dari ibdata1
Anda benar-benar harus menghapus file:
- Lakukan
mysqldump
dari semua database, prosedur, pemicu dll kecualimysql
danperformance_schema
basis data - Hapus semua database kecuali 2 database di atas
- Hentikan mysql
- Hapus
ibdata1
danib_log
file - Mulai mysql
- Pulihkan dari dump
Saat Anda memulai MySQL pada langkah 5 ibdata1
dan ib_log
file akan dibuat ulang.
Sekarang Anda siap untuk pergi. Saat Anda membuat database baru untuk analisis, tabel akan ditempatkan di ibd*
separate yang terpisah file, bukan di ibdata1
. Seperti biasanya Anda segera menghapus database, ibd*
file akan dihapus.
http://dev.mysql.com/doc/refman /5.1/en/drop-database.html
Anda mungkin pernah melihat ini:
http://bugs.mysql.com /bug.php?id=1341
Dengan menggunakan perintah ALTER TABLE <tablename> ENGINE=innodb
atau OPTIMIZE TABLE <tablename>
seseorang dapat mengekstrak halaman data dan indeks dari ibdata1 untuk memisahkan file. Namun, ibdata1 tidak akan menyusut kecuali Anda melakukan langkah-langkah di atas.
Mengenai information_schema
, yang tidak perlu atau tidak mungkin untuk dijatuhkan. Ini sebenarnya hanya sekumpulan tampilan read-only, bukan tabel. Dan tidak ada file yang terkait dengannya, bahkan direktori database pun tidak. informations_schema
menggunakan memori db-engine dan dijatuhkan dan dibuat ulang saat stop/restart mysqld. Lihat https://dev.mysql.com/doc/ refman/5.7/en/information-schema.html
.