InnoDB की वास्तुकला चार बुनियादी प्रकार के जानकारी पृष्ठों के उपयोग की मांग करती है
- तालिका डेटा पृष्ठ
- टेबल इंडेक्स पेज
- तालिका मेटाडेटा
- MVCC डेटा (लेनदेन अलगाव और ACID अनुपालन का समर्थन करने के लिए)
- रोलबैक सेगमेंट
- अंतरिक्ष को पूर्ववत करें
- डबल लिखें बफर (ओएस कैशिंग पर निर्भरता को रोकने के लिए पृष्ठभूमि लेखन)
- बफर डालें (गैर-विशिष्ट माध्यमिक अनुक्रमित में परिवर्तन का प्रबंधन)
Ibdata1 का सचित्र प्रतिनिधित्व देखें
डिफ़ॉल्ट रूप से, innodb_file_per_table अक्षम है। यह सभी चार जानकारी पृष्ठ प्रकारों को ibdata1 नामक एकल फ़ाइल को लैंड करने का कारण बनता है। कई लोग कई ibdata फाइलें बनाकर डेटा को फैलाने की कोशिश करते हैं। इससे डेटा और इंडेक्स पेजों का विखंडन हो सकता है।
यही कारण है कि मैं अक्सर डिफ़ॉल्ट ibdata1 फ़ाइल का उपयोग करते हुए और कुछ भी अधिक नहीं, InnoDB बुनियादी ढांचे को साफ करने की सलाह देता हूं ।
बुनियादी ढांचे की वजह से नकल करना बहुत खतरनाक है जिसके तहत InnoDB काम करता है। दो बुनियादी संरचनाएँ हैं
- innodb_file_per_table अक्षम किया गया
- innodb_file_per_table सक्षम किया गया
साथ innodb_file_per_table विकलांग, InnoDB जानकारी के इन सभी प्रकार ibdata1 भीतर रहते हैं। Ibdata1 के बाहर किसी भी InnoDB तालिका की एकमात्र अभिव्यक्ति InnoDB तालिका की .frm फ़ाइल है। एक बार में सभी InnoDB डेटा कॉपी करना सभी / var / lib / mysql की प्रतिलिपि बनाने की आवश्यकता है।
एक व्यक्ति InnoDB तालिका की नकल करना पूरी तरह से असंभव है। डेटा का तार्किक प्रतिनिधित्व और इसकी अनुक्रमणिका परिभाषाओं के रूप में आपको तालिका का एक डंप निकालने के लिए MySQL डंप करना होगा। फिर आप उस डंप को उसी सर्वर या किसी अन्य सर्वर पर दूसरे डेटाबेस में लोड करेंगे।
Innodb_file_per_table सक्षम होने के साथ , तालिका डेटा और इसके अनुक्रमित .frm फ़ाइल के बगल में डेटाबेस फ़ोल्डर में रहते हैं। उदाहरण के लिए, तालिका db1.mytable के लिए, ibdata1 के बाहर उस InnoDB तालिका की अभिव्यक्ति होगी:
/var/lib/mysql/db1/mytable.frm
/var/lib/mysql/db1/mytable.ibd
सिस्टम टेबल्सस्पेस ibdata1
Db1.mytable के लिए सभी मेटाडेटा अभी भी ibdata1 में रहते हैं और इसके आसपास कोई रास्ता नहीं है । Redo लॉग और MVCC डेटा अभी भी ibdata1 के साथ रहते हैं।
जब टेबल विखंडन की बात आती है, तो यहां ibdata1 का क्या होता है:
- innodb_file_per_table सक्षम : आप db1.mytables के साथ
ALTER TABLE db1.mytable ENGINE=InnoDB;
याको छोटा कर सकते हैंOPTIMIZE TABLE db1.mytable;
। इससे /var/lib/mysql/db1/mytable.ibd बिना किसी विखंडन के शारीरिक रूप से छोटा हो जाता है।
- innodb_file_per_table विकलांग : आप के साथ db1.mytables हटना नहीं कर सकते हैं
ALTER TABLE db1.mytable ENGINE=InnoDB;
याOPTIMIZE TABLE db1.mytable;
क्योंकि यह ibdata1 साथ रहती है। रनिंग या तो वास्तव में कमांड, तालिका को सन्निहित और पढ़ने और लिखने के लिए तेज़ बनाते हैं। दुर्भाग्य से, यह ibdata1 के अंत में होता है। इससे ibdata1 तेजी से बढ़ता है। यह पूरी तरह से मेरे InnoDB सफाई पोस्ट में संबोधित किया गया है ।
यदि आप .frm और .ibd फ़ाइल को कॉपी करने के बारे में सोच रहे हैं, तो आप दुख की दुनिया के लिए कतार में हैं। एक InnoDB तालिका की .frm और .ibd फ़ाइल की प्रतिलिपि बनाना केवल तभी अच्छा है यदि आप केवल यह गारंटी दे सकते हैं कि .ibd फ़ाइल की टेबलस्पेस आईडी ibdata1 फ़ाइल के मेटाडेटा में टेबलस्पेस आईडी प्रविष्टि के साथ बिल्कुल मेल खाती है ।
मैंने इस टेबल्स आईडी कॉन्सेप्ट के बारे में DBA StackExchange में दो पोस्ट लिखे
बेमेल टेबल्स आईडी की स्थिति में ibdata1 पर किसी भी .ibd फ़ाइल को रीटेट करने के तरीके के बारे में एक उत्कृष्ट लिंक यहां दिया गया है: http://www.chriscalender.com/?tag=innodb-error-tablesetace-id-in-file । इसे पढ़ने के बाद, आपको तत्काल अहसास होना चाहिए कि नकल करना .ibd फाइलें सिर्फ सादा पागलपन है।
InnoDB के लिए, आपको केवल इसे स्थानांतरित करने के लिए कुछ चाहिए
CREATE TABLE db2.mytable LIKE db1.mytable;
INSERT INTO db2.mytable SELECT * FROM db1.mytable;
एक InnoDB तालिका की एक प्रतिलिपि बनाने के लिए।
यदि आप इसे किसी अन्य DB सर्वर पर माइग्रेट कर रहे हैं, तो mysqldump का उपयोग करें।
सभी डेटाबेस से सभी InnoDB तालिकाओं को मिलाने के संबंध में, मैं वास्तव में ऐसा करने में समझदारी देख सकता हूं। मेरे नियोक्ता की DB / वेब होस्टिंग कंपनी में, मेरे पास एक MySQL क्लाइंट है जिसमें एक डेटाबेस में एक तालिका है जिसकी बाधाओं को उसी MySQL उदाहरण के भीतर किसी अन्य डेटाबेस में दूसरी तालिका में मैप किया जाता है। एक सामान्य मेटाडेटा रिपॉजिटरी के साथ, यह कई डेटाबेस में ट्रांसेक्शनल सपोर्ट और MVCC को संभव बनाता है।