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
- Cara:Membersihkan mesin penyimpanan mysql InnoDB?
- https://dba.stackexchange.com/questions/8982/is-there-any-best-way-to-reduce-the-size-of-ibdata-in-mysql/ 8983#8983
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;