यही कारण है कि MySQL उन फ़ाइलों को नहीं देख सकता है: सिस्टम टेबलस्पेस (ibdata1) में एक स्टोरेज-इंजन विशिष्ट डेटा शब्दकोश है जो इनोबीडी को संभावित टेबल उपयोग को मैप करने देता है:
एक स्थान से दूसरे स्थान पर इनोबीडी टेबल को ले जाने के लिए कमांड की आवश्यकता होती है
ALTER TABLE tblname DISCARD TABLESPACE;
ALTER TABLE tblname IMPORT TABLESPACE;
यहाँ MySQL 5.5 प्रलेखन का एक हिस्सा है जो यह बताता है कि क्या विचार करने की आवश्यकता है
.Ibd फ़ाइलों के लिए पोर्टेबिलिटी विचार
आप डेटाबेस निर्देशिकाओं के बीच स्वतंत्र रूप से .ibd फ़ाइलों को स्थानांतरित नहीं कर सकते हैं जैसा कि आप MyISAM तालिका फ़ाइलों के साथ कर सकते हैं। InnoDB साझा तालिकाओं में संग्रहीत तालिका परिभाषा में डेटाबेस का नाम शामिल है। तालिकाओं फ़ाइलों में संग्रहीत लेनदेन आईडी और लॉग अनुक्रम संख्या भी डेटाबेस के बीच भिन्न होती है।
एक .ibd फ़ाइल और संबंधित तालिका को एक डेटाबेस से दूसरे में ले जाने के लिए, RENAME TABLE स्टेटमेंट का उपयोग करें:
RENAME TABLE db1.tbl_name को db2.tbl_name; यदि आपके पास .ibd फ़ाइल का "क्लीन" बैकअप है, तो आप इसे उस MySQL इंस्टॉलेशन में पुनर्स्थापित कर सकते हैं जहाँ से यह उत्पन्न हुआ है:
आपके द्वारा .ibd फ़ाइल को कॉपी करने के बाद टेबल को गिराया या छोटा नहीं किया गया होगा, क्योंकि ऐसा करने से टेबलस्पेस के अंदर संग्रहीत टेबल आईडी बदल जाती है।
वर्तमान .ibd फ़ाइल को हटाने के लिए यह वैकल्पिक विवरण जारी करें:
अन्य तालिका tbl_name DISCARD TABLESPACE; बैकअप .ibd फ़ाइल को उचित डेटाबेस निर्देशिका में कॉपी करें।
तालिका के लिए नई .ibd फ़ाइल का उपयोग करने के लिए InnoDB को बताने के लिए यह वैकल्पिक विवरण जारी करें:
अन्य तालिका tbl_name आयात तालिकाएँ; इस संदर्भ में, "साफ" .ibd फ़ाइल बैकअप वह है जिसके लिए निम्नलिखित आवश्यकताएँ पूरी होती हैं:
.Ibd फ़ाइल में लेन-देन के द्वारा कोई भी अनधिकृत संशोधन नहीं हैं।
.Ibd फ़ाइल में कोई अनमर्ज़ सम्मिलित बफ़र प्रविष्टियाँ नहीं हैं।
Purge ने .ibd फ़ाइल से सभी डिलीट-मार्क इंडेक्स रिकॉर्ड्स को हटा दिया है।
mysqld ने .ibd फ़ाइल के सभी संशोधित पृष्ठों को बफर पूल से फ़ाइल में फ्लश कर दिया है।
इन गहनों और प्रोटोकॉल को देखते हुए, यहां कार्रवाई का एक सुझाया गया पाठ्यक्रम है
इस उदाहरण के लिए, आइए डेटाबेस में tags
तालिका को पुनर्स्थापित करने का प्रयास mydb
करें
चरण 1
सुनिश्चित करें कि आपके पास उन .frm
और .ibd
फ़ाइलों का बैकअप है/tmp/innodb_data
चरण 2
CREATE TABLE tags
बयान प्राप्त करें और इसे निष्पादित करें CREATE TABLE mydb.tags ...
। सुनिश्चित करें कि यह मूल के समान सटीक संरचना हैtags.frm
चरण 3
tags.ibd
MySQL का उपयोग करके रिक्त को हटाएं
ALTER TABLE mydb.tags DISCARD TABLESPACE;
चरण 4
की बैकअप कॉपी में लाएं tags.ibd
cd /var/lib/mysql/mydb
cp /tmp/innodb_data.tags.ibd .
chown mysql:mysql tags.ibd
STEP # 5
tags
InnoDB डेटा शब्दकोश में तालिका जोड़ें
ALTER TABLE mydb.tags IMPORT TABLESPACE;
चरण 6
तालिका की पहुंच का परीक्षण करें
SHOW CREATE TABLE mydb.tags\G
SELECT * FROM mydb.tags LIMIT 10;
यदि आपको सामान्य परिणाम मिलते हैं, तो बधाई हो कि आप एक InnoDB तालिका आयात करते हैं।
चरण 7
भविष्य में, कृपया ibdata1 और उसके लॉग को न हटाएं
कोशिश करो !!!
मैंने पहले भी इस तरह की चीजों पर चर्चा की है
चेतावनी
क्या होगा यदि आप तालिका की संरचना नहीं जानते हैं tags
?
वहाँ सिर्फ .frm
फ़ाइल का उपयोग कर सृजन टेबल विवरण प्राप्त करने के लिए उपकरण हैं । मैंने इस बारे में एक पोस्ट भी लिखी थी: टेबल स्कीमा को सिर्फ .frm फाइल से कैसे निकाला जा सकता है? । उस पोस्ट में, मैंने लिनक्स बॉक्स से विंडोज मशीन में एक .frm फाइल कॉपी की, विंडोज टूल चलाया और CREATE TABLE
स्टेटमेंट प्राप्त किया।