sql >> Database >  >> RDS >> Mysql

MySQL:ibdata-bestandsgrootte verkleinen voor MyISAM-tabellen

ibdata1 en MyISAM sluiten elkaar uit.

Het eerste dat u moet doen, is tellen hoeveel tabellen beide opslagengines gebruiken:

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

Als SOMMIGE tabellen InnoDB zijn:

Voer mijn opschoning van InnoDB uit

Als u alleen MyISAM-tabellen heeft en geen InnoDB-tabellen:

Verwijder eerst alle sporen van InnoDBDoe het volgende:

STAP01) Voeg dit toe aan mijn.cnf

[mysqld]
skip-innodb

STEP02) service mysql restart

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

Na deze stappen kunt u een compressie van elke MyISAM-tabellen als volgt uitvoeren:

Voor de tabel mydb.mytable die MyISAM is, voert u een van de volgende handelingen uit:

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

Als je al je MyISAM-tabellen wilt defragmenteren, is hier een shellscript om dit te doen...

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

Zodra u het script visueel vertrouwt, voert u het gewoon uit

mysql ${MYSQL_CONN} < GlobalMyISAMOptmizeTable.sql

Probeer het eens !!!

UPDATE 25-07-2012 09:52 EDT

Ik wil graag een van mijn suggesties voor compressie van MyISAM verduidelijken

Ik zei eerder

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

Deze commando's zijn mechanisch identiek. OPTIMIZE TABLE voert een defragmentatie uit van de MyISAM-tabel en voert vervolgens ANALYZE TABLE uit om nieuwe indexstatistieken te berekenen.

Mechanisch gezien is dit wat ALTER TABLE mydb.mytable ENGINE=MyISAM; doet:

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. MySQL-problemen - Hiragana en Katakana worden als hetzelfde behandeld

  2. PostgreSQL dumpen en herstellen in verschillende tijdzones

  3. Hoe een SQL-query met vele duizenden WHERE-clausules te optimaliseren

  4. Straal/dichtstbijzijnde resultaten - Google Maps API