Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL:zmniejszenie rozmiaru pliku ibdata dla tabel MyISAM

ibdata1 i MyISAM wzajemnie się wykluczają.

Pierwszą rzeczą, którą powinieneś zrobić, to policzyć, ile tabel korzysta z obu silników pamięci masowej:

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

Jeśli NIEKTÓRE tabele to InnoDB:

Wykonaj czyszczenie InnoDB

Jeśli masz tylko tabele MyISAM i nie masz tabel InnoDB:

Najpierw usuń wszelkie ślady InnoDBWykonaj następujące czynności:

KROK01) Dodaj to do my.cnf

[mysqld]
skip-innodb

STEP02) service mysql restart

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

Po wykonaniu tych kroków możesz wykonać kompresję każdej tabeli MyISAM w następujący sposób:

Dla tabeli mydb.mytable, czyli MyISAM, uruchom jedną z następujących czynności:

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

Jeśli chcesz zdefragmentować wszystkie tabele MyISAM, oto skrypt powłoki, który to zrobi...

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

Gdy zaufasz wizualnie skryptowi, po prostu go uruchom

mysql ${MYSQL_CONN} < GlobalMyISAMOptmizeTable.sql

Wypróbuj !!!

AKTUALIZACJA 25.07.2012 09:52 EDT

Chciałbym wyjaśnić jedną z moich sugestii dotyczących kompresji MyISAM

Powiedziałem wcześniej

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

Te polecenia są mechanicznie identyczne. OPTIMIZE TABLE wykonuje defragmentację tabeli MyISAM, a następnie uruchamia ANALYZE TABLE do obliczania świeżych statystyk indeksu.

Mówiąc mechanicznie, to właśnie ALTER TABLE mydb.mytable ENGINE=MyISAM; robi:

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. Utwórz inny zestaw wyników za pomocą jednego zestawu wyników

  2. określenie najczęściej używanego zestawu słów php mysql

  3. MySQL liczy złożone wyniki zapytań?

  4. funkcja load_file nie działa w mysql

  5. Automatycznie generowany numer sekwencyjny zaczynający się od 001 ( TYLKO DLA 3 CYFR) - PHP / MYSQL