Ibdata1 के बिना ibdata1 से डेटा फ़ोल्डर से MySQL डेटाबेस पुनर्प्राप्त करें


15

मेरी WAMP निर्देशिका गलती से किसी अन्य उपयोगकर्ता द्वारा हटा दी जाती है। केवल MySQLis में उपलब्ध डेटा फ़ोल्डर। और, केवल डेटाबेस-फ़ोल्डर्स ("\ bin \ mysql \ mysql5.6.12 \ data \" डेटाबेस के नाम वाले फ़ोल्डर) उपलब्ध हैं। " Ibdata1 " सहित " \ bin \ mysql \ mysql5.6.12 \ data \" की जड़ वाली सभी फाइलें भी हटा दी जाती हैं।

डेटाबेस फ़ोल्डरों में केवल एक्सटेंशन के नीचे फाइलें होती हैं।

* .frm, * .ibd

और "db.opt" फ़ाइल।

डेटाबेस को कैसे पुनर्प्राप्त किया जा सकता है?

मैंने पहले ही bdata1 को पुनर्प्राप्त करने का प्रयास किया है। लेकिन, इसे वापस पाने में असमर्थ हैं। और, कुछ डेटाबेस में MYISAM भी है।

जवाबों:


16

MyISAM

एक MyISAM तालिका mydb.mytable के लिए, आपके पास तीन फाइलें होनी चाहिए

  • \bin\mysql\mysql5.6.12\data\mydb\mytable.frm
  • \bin\mysql\mysql5.6.12\data\mydb\mytable.MYD
  • \bin\mysql\mysql5.6.12\data\mydb\mytable.MYI

उन्हें पहले से ही एक तालिका के रूप में सुलभ होना चाहिए क्योंकि प्रत्येक फ़ाइल में आवश्यक डेटा, मेटाडेटा और इंडेक्स जानकारी शामिल है। सामूहिक रूप से, वे तालिका बनाते हैं। उपयोग करने के लिए कोई बाहरी भंडारण इंजन mecahnism नहीं हैं।

InnoDB

InnoDB के इस सचित्र प्रतिनिधित्व पर एक नज़र डालें

InnoDB वास्तुकला

.ibdफ़ाइलों के लिए ibdata1 संलग्न करने वाली एकमात्र चीज़ डेटा शब्दकोश है।

आपका मिशन, क्या आपको इसे स्वीकार करने का निर्णय लेना चाहिए, प्रत्येक तालिका बनाना और इसमें स्वैप करना है .ibd

इससे पहले कि आप कुछ भी करें, दूसरे को "\ bin \ mysql \ mysql5.6.12 \ data" की पूरी प्रतिलिपि बनाएँ

यहाँ एक नमूना है

मान लीजिए कि आपके पास mydbतालिका के साथ एक डेटाबेस है mytable। इसका मतलब है की

  • आपके पास फोल्डर है \bin\mysql\mysql5.6.12\data\mydb
  • उस फ़ोल्डर के अंदर, आपके पास है
    • mytable.frm
    • mytable.ibd

आपको चाहिए .frm। यदि आप मेरी पोस्ट को देखते हैं तो सिर्फ .frm फ़ाइल से टेबल स्कीमा कैसे निकाल सकते हैं? , आप एक MySQL उपयोगिता डाउनलोड कर सकते हैं जो तालिका बनाने के लिए आवश्यक SQL उत्पन्न कर सकती है।

अब आपको निम्नलिखित करना चाहिए

  • को स्थानांतरित mytable.ibdकरें\bin\mysql\mysql5.6.12\data
  • InnoDB तालिका बनाने के लिए SQL चलाएँ
  • Mysql में लॉगिन करें और चलाएं ALTER TABLE mydb.mytable DISCARD TABLESPACE;(यह हटा देगा \bin\mysql\mysql5.6.12\data\mydb\mytable.ibd)
  • कॉपी \bin\mysql\mysql5.6.12\data\mytable.ibdमें\bin\mysql\mysql5.6.12\data\mydb
  • Mysql में लॉगिन करें और चलाएं ALTER TABLE mydb.mytable IMPORT TABLESPACE;(यह \bin\mysql\mysql5.6.12\data\mydb\mytable.ibdडेटा शब्दकोश में पंजीकृत होगा )

इसके बाद, तालिका mydb.mytableपूरी तरह से सुलभ होनी चाहिए। आप बस चलाकर उस पहुंच को परख सकते हैं:

SELECT * FROM mydb.mytable LIMIT 10;

कोशिश करो !!!

DRINK (डेटा रिकवरी आवश्यक रूप से आवश्यक ज्ञान शामिल करता है)


इस महान उत्तर को पूरा करने के लिए, निर्दोष के लिए आपको किसी भी FK बाधा को हटाने की आवश्यकता होगी जो तालिका को छोड़ने से पहले तालिका का संदर्भ देती है। आयात के बाद, आपको एफके को फिर से बनाना चाहिए।
19

तालिका स्थान आयात करने के बाद information_schema.key_column_usage(संभवत: अन्य तालिकाओं के रूप में) पहली बार में कोई डेटा नहीं लौटाएगा, selectइसलिए आपको कम से कम एक क्वेरी निष्पादित करनी होगी और अगली क्वेरी के काम करने से पहले कुछ सेकंड इंतजार करना होगा। (mysql Ver 14.14 Distrib 5.7.19, Linux-glibc2.12 (x86_64) के लिए EditLine आवरण का उपयोग करते हुए)
user3338098
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.