ibdata1 и MyISAM се изключват взаимно.
Първото нещо, което трябва да направите, е да преброите колко таблици използват и двете машини за съхранение:
SELECT COUNT(1) EngineCount,engine
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','performance_schema','mysql')
GROUP BY engine;
Ако НЯКОИ таблици са InnoDB:
Извършете моето почистване на InnoDB
- Как да:Почистете mysql InnoDB двигател за съхранение?
- https://dba.stackexchange.com/questions/8982/is-there-any-best-way-to-reduce-the-size-of-ibdata-in-mysql/ 8983#8983
Ако имате само таблици MyISAM и нямате таблици InnoDB:
Първо елиминирайте всички следи от InnoDB Направете следното:
СТЪПКА01) Добавете това към my.cnf
[mysqld]
skip-innodb
СТЪПКА02) service mysql restart
СТЪПКА03) rm -f /var/lib/mysql/ibdata1 /var/lib/mysql/ib_logfile*
След тези стъпки можете да извършите компресиране на всяка MyISAM таблица по следния начин:
За таблицата mydb.mytable, която е MyISAM, просто изпълнете едно от следните:
OPTIMIZE TABLE mydb.mytable;
ALTER TABLE mydb.mytable ENGINE=MyISAM; ANALYZE TABLE mydb.mytable;
Ако искате да дефрагментирате всичките си MyISAM таблици, ето скрипт за обвивка, за да го направите...
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
След като се доверите визуално на скрипта, просто го стартирайте
mysql ${MYSQL_CONN} < GlobalMyISAMOptmizeTable.sql
Опитайте!!!
АКТУАЛИЗАЦИЯ 2012-07-25 09:52 EDT
Бих искал да изясня едно от моите предложения за компресиране на MyISAM
Казах по-рано
OPTIMIZE TABLE mydb.mytable;
ALTER TABLE mydb.mytable ENGINE=MyISAM; ANALYZE TABLE mydb.mytable;
Тези команди са механично идентични. OPTIMIZE TABLE
извършва дефрагментиране на таблицата MyISAM и след това изпълнява ANALYZE TABLE
за изчисляване на свежи статистически данни за индекса.
Механично казано, това е, което ALTER TABLE mydb.mytable ENGINE=MyISAM;
прави:
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;