Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara mengecilkan/membersihkan file ibdata1 di MySQL

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:

  1. Lakukan mysqldump dari semua database, prosedur, pemicu dll kecuali mysql dan performance_schema basis data
  2. Hapus semua database kecuali 2 database di atas
  3. Hentikan mysql
  4. Hapus ibdata1 dan ib_log file
  5. Mulai mysql
  6. 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 .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - SELECT WHERE field IN (subquery) - Mengapa sangat lambat?

  2. Apa string koneksi driver MySQL JDBC?

  3. Bagaimana cara mencadangkan dan memulihkan basis data MySQL?

  4. Bagaimana cara MEMPERBARUI baris dalam tabel atau INSERT jika tidak ada?

  5. Bagaimana cara mengganti kunci utama Django dengan bilangan bulat berbeda yang unik untuk tabel itu