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

MySQL:mengurangi ukuran file ibdata untuk tabel MyISAM

ibdata1 dan MyISAM saling eksklusif.

Hal pertama yang harus Anda lakukan adalah menghitung berapa banyak tabel yang menggunakan kedua mesin penyimpanan:

SELECT COUNT(1) EngineCount,engine
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','performance_schema','mysql')
GROUP BY engine;

Jika BEBERAPA tabel adalah InnoDB:

Lakukan Pembersihan InnoDB

Jika Anda hanya memiliki tabel MyISAM dan tidak ada tabel InnoDB:

Pertama, hilangkan jejak InnoDBLakukan hal berikut:

LANGKAH01) Tambahkan ini ke my.cnf

[mysqld]
skip-innodb

LANGKAH02) service mysql restart

LANGKAH03) rm -f /var/lib/mysql/ibdata1 /var/lib/mysql/ib_logfile*

Setelah langkah-langkah ini, Anda dapat melakukan Kompresi Setiap tabel MyISAM seperti ini:

Untuk tabel mydb.mytable yaitu MyISAM, jalankan saja salah satu dari berikut ini:

  • OPTIMIZE TABLE mydb.mytable;
  • ALTER TABLE mydb.mytable ENGINE=MyISAM; ANALYZE TABLE mydb.mytable;

Jika Anda ingin mendefrag semua tabel MyISAM Anda, berikut adalah skrip shell untuk melakukannya...

MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
SQL="SELECT CONCAT('OPTIMIZE TABLE ',table_schema,'.',table_name,';') "
SQL="${SQL} FROM information_schema.tables "
SQL="${SQL} WHERE engine='MyISAM' AND table_schema NOT IN "
SQL="${SQL} ('information_schema','performance_schema','mysql')"
mysql ${MYSQL_CONN} -ANe"${SQL}" > GlobalMyISAMOptmizeTable.sql
less GlobalMyISAMOptmizeTable.sql

Setelah Anda memercayai skrip secara visual, jalankan saja

mysql ${MYSQL_CONN} < GlobalMyISAMOptmizeTable.sql

Cobalah !!!

PERBARUI 25-07-2012 09:52 EDT

Saya ingin mengklarifikasi salah satu saran saya untuk kompresi MyISAM

Saya katakan sebelumnya

  • OPTIMIZE TABLE mydb.mytable;
  • ALTER TABLE mydb.mytable ENGINE=MyISAM; ANALYZE TABLE mydb.mytable;

Perintah-perintah ini secara mekanis identik. OPTIMIZE TABLE melakukan defrag tabel MyISAM dan kemudian menjalankan ANALYZE TABLE untuk menghitung statistik indeks baru.

Secara mekanis, inilah yang ALTER TABLE mydb.mytable ENGINE=MyISAM; melakukan:

CREATE TABLE mydb.mytabletmp LIKE mydb.mytable;
INSERT INTO mydb.mytabletmp SELECT * FROM mydb.mytable;
ALTER TABLE mydb.mytable RENAME mydb.mytablezap;
ALTER TABLE mydb.mytabletmp RENAME mydb.mytable;
DROP TABLE mydb.mytablezap;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cara memasukkan beberapa nilai dalam satu bidang di mysql

  2. Menyimpan informasi EXIF ​​​​di Database

  3. Ketika saya keluar dari semua input, terkadang meninggalkan garis miring (\) di string dan memasukkannya ke database. Mengapa itu terjadi dan bagaimana saya bisa menyelesaikannya?

  4. Dapatkan Hanya nama kolom seperti dalam array mysql

  5. ERROR 2003 (HY000):Tidak dapat terhubung ke server MySQL di localhost (10061)