MySQL डेटाबेस को .myd, .myi, .frm फ़ाइलों से कैसे पुनर्प्राप्त करें


183

कैसे से मेरी MySQL डेटाबेस में से एक को बहाल करने .myd, .myi, .frmफ़ाइलें?


10
हालांकि मैंने इसका उत्तर दिया, यह वास्तव में सर्वरफॉल्ट पर आधारित है।
derobert

31
@ चंद्रजीत को आपको वास्तव में सबसे अधिक मतदान वाले उत्तर को स्वीकार करना चाहिए।
टावर

2
हे चन्द्रजीत, आप अपमानजनक उत्तर क्यों स्वीकार नहीं करते? मैं पुष्टि करता हूं कि यह मेरे लिए भी काम करता है। क्या यह आपके लिए नहीं है? stackoverflow.com/help/someone-answers
ताज़

जवाबों:


173

यदि ये MyISAM टेबल हैं, तो .FRM, .MYD, और .MYI फ़ाइलों को एक डेटाबेस डायरेक्टरी (जैसे, /var/lib/mysql/dbname) में डालकर उस टेबल को उपलब्ध कराएँगे । यह वैसा ही डेटाबेस होना जरूरी नहीं है जैसा कि वे आए थे, एक ही सर्वर, एक ही MySQL संस्करण, या समान वास्तुकला। आपको फ़ोल्डर के लिए स्वामित्व बदलने की भी आवश्यकता हो सकती है (जैसे, chown -R mysql:mysql /var/lib/mysql/dbname)

ध्यान दें कि अनुमतियाँ ( GRANTआदि) mysqlडेटाबेस का हिस्सा हैं । इसलिए उन्हें तालिकाओं के साथ बहाल नहीं किया जाएगा; आपको GRANTउपयोगकर्ताओं को बनाने, एक्सेस देने आदि के लिए उपयुक्त स्टेटमेंट चलाने की आवश्यकता हो सकती है ( mysqlडेटाबेस को पुनर्स्थापित करना संभव है, लेकिन आपको MySQL संस्करणों और mysql_upgradeउपयोगिता के किसी भी आवश्यक रन के साथ सावधान रहने की आवश्यकता है ।)

दरअसल, आपको शायद सिर्फ .FRM (टेबल स्ट्रक्चर) और .MYD (टेबल डेटा) की जरूरत है, लेकिन आपको .MYI (इंडेक्स) के पुनर्निर्माण के लिए टेबल की मरम्मत करनी होगी।

एकमात्र बाधा यह है कि यदि आप अपग्रेड कर रहे हैं, तो आप रिलीज़ नोट्स (और शायद मरम्मत तालिका चलाते हैं) की सबसे अच्छी जाँच करेंगे। नए MySQL संस्करण निश्चित रूप से सुविधाएँ जोड़ते हैं।

[हालांकि यह स्पष्ट होना चाहिए, यदि आप तालिकाओं को मिलाते हैं और मेल खाते हैं, तो उन तालिकाओं के बीच संबंधों की अखंडता आपकी समस्या है; MySQL परवाह नहीं करेगा, लेकिन आपके आवेदन और आपके उपयोगकर्ताओं को हो सकता है। इसके अलावा, यह विधि InnoDB तालिकाओं के लिए बिल्कुल भी काम नहीं करती है। केवल MyISAM, लेकिन आपके पास मौजूद फ़ाइलों को देखते हुए, आपके पास MyISAM है]


क्या यह वास्तव में information_schema तालिका में उपयुक्त प्रविष्टियों को जोड़े बिना काम करेगा? मेरा मतलब है कि MySQL को इन फाइलों को देखने के लिए जानने की आवश्यकता है?
ज़ेन्शई

4
Info_schema टेबल वास्तव में मौजूद नहीं हैं, वे केवल आंतरिक डेटाबेस स्थिति में विचार करते हैं। Dev.mysql.com/doc/refman/5.0/en/information-schema.html
brian-brazil

4
वाह, मुझे गंदा लगा, लेकिन मुझे लगता है कि एक MySQL4 मेरे MySQL5.1 में स्थापित किया गया था से पूरी निर्देशिका छोड़ने बस जादुई रूप से तालिकाओं को फिर से बनाया। कोई पुनः आरंभ या कुछ भी नहीं (खिड़कियों पर)।
डेव

4
यह काम करने के लिए आपको बस (हर तालिका के लिए) check table sometable; चलाने की आवश्यकता है : और फिर मरम्मत (केवल यदि आवश्यक हो) चलाने के लिए: repair table sometable;
Nux

3
यह महान काम किया! मैंने फाइलों को जगह में रख दिया था, लेकिन mysql "देख नहीं रहा था" जब तक कि मैंने स्वामित्व को "mysql: mysql" में बदल नहीं दिया।
सीन.बॉयर

26

ध्यान दें कि यदि आप MYI फ़ाइल का पुनर्निर्माण करना चाहते हैं तो REPAIR TABLE का सही उपयोग है:

REPAIR टेबल कुछ उपयोगी USE_FRM;

अन्यथा आप शायद सिर्फ एक और त्रुटि प्राप्त करेंगे।


24

मैंने बस इसके समाधान के लिए खोज की। मैं विंडोज 7 पर MySQL 5.1 या 5.6 का उपयोग कर रहा हूं।

  1. "C: \ Program Data \ MySQL \ MSQLServer5.1 \ Data" पर स्थित पुरानी फ़ाइल से .frm फ़ाइल और ibdata1 की प्रतिलिपि बनाएँ
  2. SQL सर्वर आवृत्ति को वर्तमान SQL आवृत्ति में रोकें
  3. "C: \ Program Data \ MySQL \ MSQLServer5.1 \ Data" पर स्थित डेटाफ़ॉर्म पर जाएं
  4. Ibdata1 और अपने डेटाबेस के फोल्डर को पेस्ट करें । जिस फ़ाइल को आप पुनर्प्राप्त करना चाहते हैं, उससे .frm फ़ाइल शामिल करें
  5. MySQL उदाहरण प्रारंभ करें।

इस पुनर्प्राप्ति के लिए .MYI और .MYD फ़ाइल का पता लगाने की आवश्यकता नहीं है।


इन चरणों का पालन किया (बाद में सब कुछ विफल हो गया था) और innodb_force_recovery = 4स्तर का उपयोग किया (यह सुनिश्चित नहीं है कि इस मामले में आवश्यक था)। राम - राम!
यहोशू स्टीवर्सन

6
FYI करें: ibdata1InnoDB है, MyISAM नहीं।
derobert

14

एक बात ध्यान दें:

.FRM फ़ाइल में आपकी तालिका संरचना है, और यह आपके MySQL संस्करण के लिए विशिष्ट है।

.MYD फ़ाइल संस्करण के लिए विशिष्ट नहीं है, कम से कम मामूली संस्करण नहीं।

.MYI फ़ाइल विशिष्ट है, लेकिन REPAIR TABLEदूसरे उत्तरों की तरह ही इसे छोड़ दिया और पुनर्जीवित किया जा सकता है ।

इस उत्तर का मतलब आपको यह बताना है कि यदि आपके पास अपनी तालिकाओं का एक स्कीमा डंप है, तो आप इसका उपयोग तालिका संरचना को उत्पन्न करने के लिए कर सकते हैं, फिर उन .MYD फ़ाइलों को अपने बैकअप के साथ बदलें, MYI फ़ाइलों को हटाएं, और उनकी मरम्मत करें। सब। इस तरह आप अपने बैकअप को किसी अन्य MySQL संस्करण में पुनर्स्थापित कर सकते हैं, या बिना उपयोग किए अपने डेटाबेस को पूरी तरह से स्थानांतरित कर सकते हैं mysqldump। बड़े डेटाबेस को ले जाने पर मुझे यह सुपर मददगार लगा।


14

सरल! एक डमी डेटाबेस बनाएं (अबेक कहें)

इन सभी .myd, .myi, .frm फ़ाइलों को mysql \ data \ abc में कॉपी करें, जिसमें mysql \ data \ वह स्थान है जहाँ .myd, .myi, .frm सभी डेटाबेस संग्रहीत हैं।

फिर phpMyadmin पर जाएं, db abc पर जाएं और आप अपना डेटाबेस खोजें।


सबसे छोटा और सटीक उत्तर
सेराक शिफरॉ

डेटा को पुनर्प्राप्त करने का सबसे अच्छा तरीका ... मैंने WAMP स्थापित किया, फिर एक नया डेटाबेस बनाया, नई डेटाबेस निर्देशिका में फ़ाइलों की प्रतिलिपि बनाएँ C: \ WAMP64 \ bin \ mysql \ mysqlxx \ data \ newdatabase, phpmybmin और आपके नए डेटाबेस को खोलें, आप करेंगे डेटा देखें
अलेक्जेंड्रे

7

मुझे लगता है .yi आप mysql के अंदर से मरम्मत कर सकते हैं।

यदि आप MySQL के इस प्रकार के त्रुटि संदेश देखते हैं: डेटाबेस क्वेरी (क्वेरी) 1016 निष्पादित करने में विफल रहा: फ़ाइल को नहीं खोल सकता: 'someable.MYI'। (ग़लती: 145) त्रुटि Msg: 1034: तालिका के लिए गलत कुंजी फ़ाइल: 'कुछ'। इसे सुधारने की कोशिश करें तब आपके पास शायद दुर्घटनाग्रस्त या भ्रष्ट तालिका हो।

आप इस तरह से mysql प्रॉम्प्ट से टेबल की जांच और मरम्मत कर सकते हैं:

check table sometable;
+------------------+-------+----------+----------------------------+
| Table | Op | Msg_type | Msg_text | 
+------------------+-------+----------+----------------------------+ 
| yourdb.sometable | check | warning | Table is marked as crashed | 
| yourdb.sometable | check | status | OK | 
+------------------+-------+----------+----------------------------+ 

repair table sometable;
+------------------+--------+----------+----------+ 
| Table | Op | Msg_type | Msg_text | 
+------------------+--------+----------+----------+ 
| yourdb.sometable | repair | status | OK | 
+------------------+--------+----------+----------+

और अब आपकी तालिका ठीक होनी चाहिए:

check table sometable;
+------------------+-------+----------+----------+ 
| Table | Op | Msg_type | Msg_text |
+------------------+-------+----------+----------+ 
| yourdb.sometable | check | status | OK |
+------------------+-------+----------+----------+

6

मुझे फ़ाइलों को .sqlफ़ाइल में कनवर्ट करने के लिए एक समाधान मिला (आप तब .sqlफ़ाइल को एक सर्वर पर आयात कर सकते हैं और डेटाबेस को पुनर्प्राप्त कर सकते हैं), /varनिर्देशिका तक पहुंचने की आवश्यकता के बिना , इसलिए आपको ऐसा करने के लिए सर्वर व्यवस्थापक होने की आवश्यकता नहीं है।

इसके लिए आपके कंप्यूटर पर XAMPP या MAMP इंस्टॉल होना आवश्यक है।

  • आपके द्वारा XAMPP स्थापित करने के बाद, इंस्टॉल निर्देशिका (आमतौर पर C:\XAMPP), और उप-निर्देशिका पर नेविगेट करें mysql\data। पूरा रास्ता होना चाहिएC:\XAMPP\mysql\data
  • आपके अंदर आपके द्वारा बनाए गए किसी भी अन्य डेटाबेस के फ़ोल्डर दिखाई देंगे। कॉपी और फ़ोल्डर का पूरा पेस्ट करें .myd, .myiऔर .frmवहाँ में फ़ाइलों। उस फ़ोल्डर का पथ होना चाहिए

    C:\XAMPP\mysql\data\foldername\.mydfiles

  • फिर localhost/phpmyadminकिसी ब्राउजर में जाएं । उस डेटाबेस का चयन करें जिसे आपने mysql\dataफ़ोल्डर में चिपकाया है , और नेविगेशन बार में एक्सपोर्ट पर क्लिक करें। एक .sqlफ़ाइल के रूप में निर्यात को चुनता है । इसके बाद यह पूछेंगे कि फाइल को कहां सेव करें

और वह यह है! अब आपके पास ( .sqlडेटाबेस ) एक फाइल होनी चाहिए जिसमें मूल रूप .mydसे .myiऔर .frmफाइलें थीं । फिर आप phpMyAdmin के माध्यम से एक नया डेटाबेस बनाने और नेविगेशन बार में 'आयात' दबाकर, फिर इसे आयात करने के चरणों का पालन करके दूसरे सर्वर पर आयात कर सकते हैं


5

जब तक यह mySQL का EXACT समान संस्करण है, तब तक आप फ़ाइलों को डेटा फ़ोल्डर की उपनिर्देशिका निर्देशिका में उचित रूप से कॉपी कर सकते हैं और आपने उस निर्देशिका में सभी संबद्ध फ़ाइलों को बनाए रखा है। यदि आपके पास सभी फाइलें नहीं हैं, तो मुझे पूरा यकीन है कि आपके पास समस्याएँ हैं।


अगर मेरे पास MySQL का एक ही संस्करण नहीं है, तो मैं क्या करूँ?
जो स्प्रैग


2

उपरोक्त विवरण मेरे लिए काम करने वाली चीजें (शायद घने या आलसी) पाने के लिए पर्याप्त नहीं था, इसलिए मैंने भविष्य में मेरी मदद करने के लिए जवाब मिलने के बाद एक बार यह स्क्रिप्ट बनाई। आशा है कि यह दूसरों की मदद करता है

vim fixperms.sh 

#!/bin/sh
for D in `find . -type d`
do
        echo $D;
        chown -R mysql:mysql $D;
        chmod -R 660 $D;
        chown mysql:mysql $D;
        chmod 700 $D;
done
echo Dont forget to restart mysql: /etc/init.d/mysqld restart;

-2

उन लोगों के लिए जिनके पास Windows XP है और MySQL सर्वर 5.5 स्थापित है - डेटाबेस के लिए स्थान C: \ Documents and Settings \ All Users \ Application Data \ MySQL \ MySQL Server 5.5 \ data है, जब तक कि आपने MySql Workchch स्थापना के भीतर स्थान नहीं बदला। जीयूआई।


3
प्रश्न विशिष्ट फ़ाइल प्रकारों से पुनर्प्राप्त करने के बारे में है, न कि उन फ़ाइलों को Windows XP MySQL 5.5 पर पाया जा सकता है।
डेनेप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.