Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL:MyISAM तालिकाओं के लिए ibdata फ़ाइल का आकार कम करना

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 के किसी भी निशान को हटा दें, निम्न कार्य करें:

STEP01) इसे my.cnf में जोड़ें

[mysqld]
skip-innodb

STEP02) service mysql restart

STEP03) 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

मैं माईसाम के संपीड़न के लिए अपने सुझावों में से एक को स्पष्ट करना चाहता हूं

मैंने पहले कहा था

  • 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. MySQL जहां नाम सरणी में नहीं है?

  2. GROUP पर किसी फ़ील्ड की पुनर्गणना कैसे करें

  3. mysql पिवट तालिका दिनांक (क्षैतिज डेटा के लिए लंबवत)

  4. क्या MySQL डेटा को टाइटल केस में बदलने का कोई आसान तरीका है?

  5. गति बढ़ाने के लिए MySQL क्वेरी को एक क्वेरी में कम करें