2008-09-22 15 views
9

मुझे एक डेटाबेस को पुनर्स्थापित करना है जो अनजाने में MySQL 5.0 में DROPped किया गया है। बैकअप फ़ाइलों की जांच करने से, मुझे लगता है कि डेटाबेस डेटा रखने के लिए एफआरएम फाइलें हैं।MySQL InnoDB डेटाबेस पुनर्स्थापित

क्या कोई सलाह दे सकता है कि मुझे बैकअप से डेटाबेस पुनर्स्थापना/आयात करने की ज़रूरत है या फिर अन्य फाइलें हैं जिन्हें मुझे पूरा करने के लिए हाथ रखना चाहिए?

उत्तर

14

.frm फ़ाइलें डेटा फ़ाइलों नहीं हैं, वे केवल "डेटा शब्दकोश जानकारी" स्टोर करते हैं (MySQL manual देखें)। InnoDB अपने डेटा को ib_logfile * फ़ाइलों में संग्रहीत करता है। बैकअप/पुनर्स्थापित करने के लिए आपको यही चाहिए। अधिक जानकारी के लिए here देखें।

+0

InnoDB को * .frm फ़ाइलों के अलावा ibdata, ib_logfile *, और/या * .ibd फ़ाइलों की आवश्यकता होती है। – silfreed

+0

क्या होगा यदि आपके पास केवल ib_logfile * और .frm फ़ाइलें हैं (एक महीने पुराने बैकअप के साथ)? उस परिदृश्य में ठीक होने का कोई मौका? या क्या आपको कुछ भी ठीक करने के लिए ibdata की आवश्यकता है? – eglasius

6

ओह मेरी ... आप परेशानी में हैं। डेटाबेस बंद करें। Innodb फ़ाइल बैकअप। प्रार्थना करें कि आपने डेटाबेस छोड़ने के बाद कुछ भी नहीं किया है।

परकोना के लोग (MySQL प्रदर्शन ब्लॉग के लेखक शामिल हैं) आपकी मदद करने में सक्षम होना चाहिए: Percona emergency support

यदि आप अपने आप पर उद्यम करते हैं, तो इसे अपने साथ लें: Data Recovery Toolkit for Innodb

इसकी रसद? आपको प्रत्येक पृष्ठ (कंप्यूटर शब्द पृष्ठ ... Innodb के मामले में 16k ब्लॉक) को पढ़ना होगा और इस तरह अपने डेटा को पुनर्निर्माण करना होगा। यह बहुत कम स्तर का काम है (हम आपके हेक्स संपादक को खोलने की बात कर रहे हैं और टूलकिट आपके लिए ऐसा नहीं करते हैं, तो बाइट्स गिनना शुरू करें), और यदि आप दृढ़ता से अनुभवी प्रोग्रामर नहीं हैं, तो आप को चोट पहुंचाने जा रहे हैं ।

7

पुनर्स्थापित कर रहा है InnoDB: (अपने डेटा फ़ोल्डर संभालने C: \ ProgramData \ MySQL \ MySQL सर्वर 5.5 \ डेटा)

  1. कॉपी डेटाबेस के फ़ोल्डर (डेटाबेस नाम के नाम पर) आप पुनर्स्थापित करना चाहते सी: \ ProgramData \ MySQL \ MySQL सर्वर 5.5 \ डेटा
  2. 3 ibdata फ़ाइलों को डेटा फ़ोल्डर पूर्व में कॉपी करें। (सी: \ ProgramData \ MySQL \ MySQL सर्वर 5.5 \ डेटा)

    _ib_logfile0 
    _ib_logfile1 
    _ibdata1 
    
  3. (यह _ib_logfile1 के रूप में ही होना चाहिए) एमबी में _ib_logfile0 फ़ाइल द्वारा के आकार जाओ राइट क्लिक करें -> गुण innodb_log_file_size = 343M के लिए

  4. संपादित mysql कॉन्फ़िग फ़ाइल (mysql \ बिन \ my.ini) वास्तव में ibdata वाली फ़ाइल का आकार होने के लिए

  5. भागो

    mysqld --defaults-फ़ाइल = mysql \ बिन \ my.ini --standalone --console --innodb_force_recovery = 6

  6. अब अपने डेटा अपने डेटाबेस में वापस आना चाहिए।phpmysql या किसी अन्य उपकरण

+0

मेरे लिए काम नहीं करता है - phpMyAdmin में मैं InnoDb टेबल देख सकता हूं, लेकिन –

+0

चरण 3/4 सुनिश्चित नहीं कर सकता अगर उन्होंने कुछ भी किया। वास्तव में mysql को पुनरारंभ करने के लिए फ़ाइलों को क्रम में निकालना पड़ा था। सुनिश्चित करें कि कौन सा चरण 5 करता है ... लेकिन चरण 1,2,5 और mysql को पुनरारंभ करना काम करना प्रतीत होता था! – msponagle

+0

बस @msponagle कहते हैं। मैं सभी चरणों को पूरा नहीं कर सका लेकिन 1, 2, शायद 3 को परिभाषित करता हूं, फिर सेवा को पुनरारंभ करें और यदि यह मशीन को पुनरारंभ करने का प्रयास शुरू नहीं करेगा। यह मेरे लिए काम किया। – ingkevin

-2

विस्तृत समाधान आप यहां पाया जा सकता है का उपयोग कर उन्हें निर्यात करें:

http://www.unilogica.com/mysql-innodb-recovery/ (पुर्तगाली में अनुच्छेद)

innodb_force_recovery का झंडा इसके अलावा, मैं एक और समाधान मिला: innodb_file_per_table, जो प्रत्येक फ़ाइल में MyISAM तालिकाओं जैसे InnoDB तालिकाओं को विभाजित करता है।

क्रैश रिकवरी में आप एकल फ़ाइल ibdata1 से कम डेटा खो सकते हैं।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^