आपको innodb_file_per_table के साथ जाना चाहिए और आपको कुछ करना होगा कि InnoDB के मौजूदा बुनियादी ढांचे के साथ सफाई कैसे की जाए।
मैंने कई DB होस्टिंग क्लाइंट सेटअप MySQL को देखा है और InnoDB को उसकी डिफ़ॉल्ट स्थिति में छोड़ दिया है। इसके कारण सिस्टम टेबलस्पेस (जिसे ibdata1 के रूप में जाना जाता है) बेतहाशा बढ़ता है।
यहां तक कि अगर आप innodb_file_per_table पर स्विच करते हैं, तो .ibd फ़ाइल को ibdata1 से निकाला जाना होगा और ibdata कभी सिकुड़ नहीं पाएगी। उदाहरण के लिए, यदि आपके पास mydb.mytable नामक एक तालिका है जो ibdata1 के अंदर 2GB ले रही है, तो आपको इसे निकालने के लिए निम्न करना होगा:
STEP 01) इसे /etc/my.cnf में जोड़ें
[mysqld]
innodb_file_per_table
कदम 02) service mysql restart
कदम 03) ALTER TABLE mydb.mytable ENGINE=InnoDB;
यह फ़ाइल /var/lib/mysql/mydb/mytable.ibd बना देगा
दुर्भाग्य से, परिवर्तन से पहले तालिका द्वारा कब्जा कर लिया गया 2GB स्थान पुनः प्राप्त नहीं किया जा सकता है। मैंने InnoDB के बुनियादी ढांचे को कैसे और क्यों साफ किया जाए, इसके बारे में पिछले पोस्ट लिखे:
एक बार जब आप यह बड़ा बदलाव करते हैं, तो innodb_open_files (डिफ़ॉल्ट 300) को बढ़ाना न भूलें । अन्यथा, डिस्क एक्सेस बहुत सीमित है।
जुड़ने के संबंध में, सुनिश्चित करें कि आपके पास उचित सूचकांक हैं जो जुड़ने के मानदंडों का समर्थन करते हैं।
UPDATE 2012-04-02 11:30 EDT
एक ताजा किश्त में innodb_file_per_table का उपयोग करने से ibdata1 बहुत धीरे-धीरे बढ़ता है क्योंकि सभी DDL को ibdata के लिए बाहरी किया जाता है। आप किसी भी InnoDB तालिका को सिकोड़ सकते हैं जैसा कि मैंने इस तरह बताया है:
ALTER TABLE mydb.mytable ENGINE=InnoDB;
अद्यतन 2012-04-02 16:50 EDT
जब बैकअप की बात आती है, तो .ibd फ़ाइलों की प्रतिलिपि बनाने में बेहद सावधानी बरतें। क्यों?
हर .ibd फ़ाइल के अंदर विशेष मूल्य है जिसे टेबलस्पेस_ड के नाम से जाना जाता है। Ibdata1 में tablespace_id मानों की एक सूची है। यदि आप कभी तालिका रखरखाव करते हैं, जिसमें तालिका को छोड़ने और पुनः बनाने की आवश्यकता होती है, तो टेबलस्पेस_ड अलग हो जाएगा। यदि आप ibdata1 की एक प्रति भी बनाते हैं, तो ऐसी .ibd फ़ाइल की एक प्रति बनाना केवल उपयोग के लिए डेटाबेस में वापस लाया जा सकता है। यह अन्य सभी InnoDB तालिकाओं के tablepace_id को खतरे में डालती है। इसके प्रकाश में, यह बेहतर है कि आप mysqldump बैकअप करें क्योंकि mysqldumps डेटा की तार्किक प्रतियां हैं। दूसरे शब्दों में, बैकअप ibdata1 के पॉइंट-इन-टाइम से स्वतंत्र है और आप बिना किसी समस्या के पुनः लोड करने के लिए स्वतंत्र हैं।