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

MySQL में ibdata1 फ़ाइल को कैसे सिकोड़ें/शुद्ध करें?

वह ibdata1 सिकुड़ नहीं रहा है MySQL की एक विशेष रूप से कष्टप्रद विशेषता है। ibdata1 फ़ाइल को वास्तव में तब तक छोटा नहीं किया जा सकता जब तक कि आप सभी डेटाबेस को हटा नहीं देते, फ़ाइलों को हटा नहीं देते और डंप को पुनः लोड नहीं करते।

लेकिन आप MySQL को कॉन्फ़िगर कर सकते हैं ताकि प्रत्येक तालिका, इसकी अनुक्रमणिका सहित, एक अलग फ़ाइल के रूप में संग्रहीत हो। इस तरह ibdata1 उतना बड़ा नहीं होगा। बिल कार्विन की टिप्पणी यह डिफ़ॉल्ट रूप से MySQL के संस्करण 5.6.6 के रूप में सक्षम है।

कुछ समय पहले मैंने ऐसा किया था। हालांकि, प्रत्येक तालिका के लिए अलग-अलग फ़ाइलों का उपयोग करने के लिए अपने सर्वर को सेटअप करने के लिए आपको my.cnf बदलने की आवश्यकता है इसे सक्षम करने के लिए:

[mysqld]
innodb_file_per_table=1

https://dev.mysql .com/doc/refman/5.6/hi/innodb-file-per-table-tablespaces.html

जैसा कि आप ibdata1 . से स्थान पुनः प्राप्त करना चाहते हैं आपको वास्तव में फ़ाइल को हटाना होगा:

  1. एक mysqldump करें mysql को छोड़कर सभी डेटाबेस, प्रक्रियाओं, ट्रिगर आदि के और performance_schema डेटाबेस
  2. सभी डेटाबेस छोड़ें उपरोक्त 2 डेटाबेस को छोड़कर
  3. mysql बंद करो
  4. हटाएं ibdata1 और ib_log फ़ाइलें
  5. mysql प्रारंभ करें
  6. डंप से पुनर्स्थापित करें

जब आप चरण 5 में MySQL प्रारंभ करते हैं ibdata1 और ib_log फ़ाइलें फिर से बनाई जाएंगी.

अब आप जाने के योग्य हैं। जब आप विश्लेषण के लिए एक नया डेटाबेस बनाते हैं, तो टेबल अलग ibd* . में स्थित होंगे फ़ाइलें, ibdata1 . में नहीं . जैसे ही आप आमतौर पर डेटाबेस को जल्द ही छोड़ देते हैं, ibd* फ़ाइलें हटा दी जाएंगी।

http://dev.mysql.com/doc/refman /5.1/hi/drop-database.html

आपने शायद इसे देखा होगा:
http://bugs.mysql.com /bug.php?id=1341

कमांड का उपयोग करके ALTER TABLE <tablename> ENGINE=innodb या OPTIMIZE TABLE <tablename> कोई डेटा और अनुक्रमणिका पृष्ठों को ibdata1 से फ़ाइलों को अलग करने के लिए निकाल सकता है। हालांकि, ibdata1 तब तक सिकुड़ेगा नहीं जब तक आप ऊपर दिए गए चरणों का पालन नहीं करते।

information_schema . के बारे में , यह आवश्यक नहीं है और न ही गिराना संभव है। यह वास्तव में केवल पढ़ने के लिए विचारों का एक समूह है, टेबल नहीं। और उनसे जुड़ी कोई फाइल नहीं है, यहां तक ​​कि एक डेटाबेस निर्देशिका भी नहीं है। informations_schema मेमोरी डीबी-इंजन का उपयोग कर रहा है और mysqld को रोकने/पुनरारंभ करने पर गिराया और पुन:उत्पन्न किया जाता है। देखें https://dev.mysql.com/doc/ refman/5.7/hi/information-schema.html



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. उपयोगकर्ता 'रूट' @ 'लोकलहोस्ट' (पासवर्ड का उपयोग करके:हाँ) के लिए प्रवेश अस्वीकृत - कोई विशेषाधिकार नहीं?

  2. MySQL IF () फ़ंक्शन समझाया गया

  3. डुप्लीकेट कुंजी अद्यतन के साथ MySQL लोड डेटा इनफाइल

  4. मैं पायथन के साथ MySQL डेटाबेस में INSERT के बाद आईडी कैसे प्राप्त करूं?

  5. एकाधिक निकाय बाइंडिंग के साथ ElasticSearch अनुक्रमणिका संरचना कैसे सेटअप करें