sql >> Databáze >  >> RDS >> Mysql

MySQL:snížení velikosti souboru ibdata pro tabulky MyISAM

ibdata1 a MyISAM se vzájemně vylučují.

První věc, kterou byste měli udělat, je spočítat, kolik tabulek používá oba moduly úložiště:

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

Pokud jsou NĚKTERÉ tabulky InnoDB:

Proveďte čištění InnoDB

Pokud máte pouze tabulky MyISAM a žádné tabulky InnoDB:

Nejprve odstraňte veškeré stopy InnoDBDProveďte následující:

KROK01) Přidejte toto do my.cnf

[mysqld]
skip-innodb

KROK02) service mysql restart

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

Po těchto krocích můžete provést kompresi jednotlivých tabulek MyISAM takto:

Pro tabulku mydb.mytable, která je MyISAM, spusťte jednu z následujících akcí:

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

Pokud chcete defragmentovat všechny své tabulky MyISAM, zde je skript shellu, jak to udělat...

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

Jakmile skriptu vizuálně důvěřujete, stačí jej spustit

mysql ${MYSQL_CONN} < GlobalMyISAMOptmizeTable.sql

Vyzkoušejte to !!!

AKTUALIZACE 25.07.2012 09:52 EDT

Rád bych objasnil jeden z mých návrhů na kompresi MyISAM

Řekl jsem dříve

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

Tyto příkazy jsou mechanicky totožné. OPTIMIZE TABLE provede defragmentaci tabulky MyISAM a poté spustí ANALYZE TABLE pro výpočet nových statistik indexu.

Mechanicky řečeno, toto je to, co ALTER TABLE mydb.mytable ENGINE=MyISAM; dělá:

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. guid jako primární klíč?

  2. python - _mysql Nelze otevřít začleněný soubor:'config-win.h':Žádný takový soubor nebo adresář při instalaci mysql-python

  3. Při aktualizaci pomocí Dataadapter došlo k výjimce DBConcurrency

  4. pohled na nahrazení Oracle během dotazu