Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL:намаляване на размера на файла ibdata за MyISAM таблици

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

Ако имате само таблици 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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да СУМИРАМЕ и ИЗВАДИМ с SQL?

  2. Използване на liquibase за създаване на тригери в mysql

  3. Съхранение на маркери в базата данни. Да се ​​съхранява етикет веднъж или много пъти?

  4. MySQL Съхранена процедура за създаване на потребител

  5. Правене на уникален ключ, нечувствителен към главните букви