प्रस्तावना: यह बुरा लगता है, लेकिन कृपया अभिनय करने से पहले इस उत्तर में सब कुछ पढ़ना सुनिश्चित करें। आप अपना समय निकालकर चीजों को और खराब नहीं कर सकते। प्रत्येक चरण को पढ़ें और उम्मीद है कि यह आपके लिए MAMP प्रो में अपने MySQL डेटाबेस सर्वर का अनुसरण करने और फिर से चलाने के लिए पर्याप्त स्पष्ट होगा।
तो, ऐसा लगता है कि आपके InnoDB डेटाबेस क्रैश हो गए हैं। ऐप ही नहीं। कुंजी यहाँ लॉग में है:
140527 15:06:58 InnoDB: highest supported file format is Barracuda.
InnoDB: Log scan progressed past the checkpoint lsn 791075520
140527 15:06:58 InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
InnoDB: Doing recovery: scanned up to log sequence number 791076717
InnoDB: Database page corruption on disk or a failed
InnoDB: file read of page 8402.
InnoDB: You may have to recover from a backup.
और ऐसा लगता है कि आप यहाँ पर MAMP PRO का उपयोग कर रहे हैं:
/Library/Application Support/appsolute/MAMP PRO/db/mysql
तो सवाल यह है कि क्या आपके पास एमएएमपी प्रो डेटाबेस का बैकअप है? या तो mysqldump
. के माध्यम से या कुछ और? क्या आपके MAMP इंस्टॉल में अन्य InnoDB डेटाबेस हैं?
साथ ही, आप कहते हैं कि आप mysqldump
run चलाने में सक्षम थे , लेकिन यह वास्तव में संभव नहीं है कि डेटाबेस क्रैश हो जाए। इसलिए मैं मान रहा हूं कि आपने mysqldump
ran कब चलाया था यह आपके सिस्टम पर MySQL की एक और, अलग स्थापना थी। MySQL बायनेरिज़ जैसे mysqldump
एमएएमपी या एमएएमपी प्रो में सिस्टमव्यापी mysqldump
. के समान नहीं हैं . वे दो 100% अलग-अलग इंस्टॉल हैं। आप देख सकते हैं कि कौन सा mysqldump
इस कमांड में टाइप करके इस्तेमाल किया जा रहा है:
which mysqldump
आप जो मानते हैं उसका पूरा पथ देखने के लिए आप उपयोग कर रहे थे। mysqldump
. का MAMP इंस्टाल —और अन्य संबंधित बायनेरिज़—यहां स्थित है:
/Applications/MAMP/Library/bin/
और अपने $PATH
. को संशोधित किए बिना इसे सीधे चलाने के लिए value (एक पूरी दूसरी बात) इसे इस तरह चलाना है:
/Applications/MAMP/Library/bin/mysqldump
कृपया ध्यान से पढ़ें: कृपया ध्यान दें कि मैं आपको नीचे जो सलाह दे रहा हूं, क्या मैं इस तरह की स्थिति से निपटने के लिए हर तरह से पेश कर रहा हूं। यदि InnoDB डेटाबेस महत्वपूर्ण नहीं है, तो बस InnoDB विशिष्ट DB फ़ाइलों को ट्रैश करने का मेरा पहला सुझाव दें। अगर आपके पास mysqldump
है बैकअप, वही काम करें लेकिन mysqldump
. को पुनर्प्राप्त करें बैकअप।
साथ ही, InnoDB नहीं है एक डिफ़ॉल्ट भंडारण इंजन। आपको इसे सेट करने के लिए अपने रास्ते से हट जाना होगा। डिफ़ॉल्ट MyISAM है। MySQL में बनाया गया कोई भी नया DB MyISAM होगा। तो यह आपकी मदद करेगा। आपको अपनी सोच की सीमा तय करनी होगी कि कौन से डेटाबेस में InnoDB स्टोरेज इंजन सेट हैं। यदि आप कहते हैं कि आपके पास 25 हैं, लेकिन केवल 1 में InnoDB, आसान समाधान है। लेकिन अगर आपके पास 25 डेटाबेस हैं, तो आपको नियमित रूप से mysqldump
बनाने की आदत डाल लेनी चाहिए। बैकअप। यदि आपके पास बैकअप होता, तो यह एक सिरदर्द होता लेकिन हल करने के लिए एक सीधी बात होती।
एक विकल्प:दूषित InnoDB सामग्री हटाएं और mysqldump
से पुनर्प्राप्त करें बैकअप.
अगर मैं आप होते तो सबसे पहले मैं mysql
. का बैकअप लेता /Library/Application Support/appsolute/MAMP PRO/db/
में निर्देशिका ताकि आपके पास कम से कम दूषित फ़ाइलों का बैकअप हो सके।
तब मैं निम्नलिखित फाइलों को हटा दूंगा:
/Library/Application Support/appsolute/MAMP PRO/db/mysql/ib_logfile0
/Library/Application Support/appsolute/MAMP PRO/db/mysql/ib_logfile1
/Library/Application Support/appsolute/MAMP PRO/db/mysql/ibdata1
वे InnoDB विशिष्ट फ़ाइलें हैं। उन्हें हटा दें और फिर एमएएमपी को फिर से शुरू करने का प्रयास करें। यह ऊपर आना चाहिए। लेकिन MAMP में कोई भी InnoDB डेटाबेस कुछ "ज़ोंबी" अवस्था में होगा। आपको उन डेटाबेस को हटा देना चाहिए और बैकअप से फिर से बनाना चाहिए। या खरोंच से यदि आप कर सकते हैं।
एक अन्य विकल्प:innodb_force_recovery
के साथ MySQL सर्वर को फिर से चालू करने और चलाने का प्रयास करें .
अब ऑफहैंड मौके पर आपको उस डीबी को पुनर्प्राप्त करने की आवश्यकता है, आप innodb_force_recovery
जैसा कि यहां बताया गया है।
एमएएमपी प्रो के लिए ऐसा लगता है कि आप इन निर्देशों के अनुसार अपनी MySQL कॉन्फ़िगरेशन फ़ाइल को संपादित कर सकते हैं:
- एमएएमपी प्रो प्रारंभ करें।
- एमएएमपी प्रो सर्वर चल रहा है तो उसे रोकें।
- फ़ाइल चुनें -> टेम्प्लेट संपादित करें -> MySQL my.cnf
- एक संपादक विंडो प्रकट होती है।
- यदि कोई चेतावनी संदेश दिखाई देता है तो OK से पुष्टि करें।
- अनुभाग "[mysqld]" ढूंढें
- इस खंड की अंतिम पंक्ति के नीचे यह पंक्ति जोड़ें:
innodb_force_recovery = 1
और जैसा कि MySQL के दस्तावेज़ में बताया गया है
, यह सख्ती से डेटाबेस को ऊपर और चलाने के लिए है ताकि आप mysqldump
के माध्यम से बैकअप बना सकें :
अब innodb_force_recovery
. के लिए लगभग 6 अलग-अलग मान हैं लेकिन आपको वास्तव में केवल 1
. के साथ प्रयास करना चाहिए अभी के लिए। यदि आप 6 में से प्रत्येक का प्रयास करना चाहते हैं, तो यहां एक विश्लेषण है:
यदि आप डेटाबेस को चालू और चालू करते हैं और फिर एक mysqldump
कर सकते हैं फिर बधाई! आप स्पष्ट हैं! सबसे अच्छा अगला कदम है
- MySQL डेटाबेस सर्वर बंद करें
innodb_force_recovery
हटाएं MySQL कॉन्फिग से विकल्प ताकि डेटाबेस सर्वर सामान्य रूप से काम कर सके।- MySQL डेटाबेस सर्वर को पुनरारंभ करें।
- भ्रष्ट MySQL डेटाबेस को सर्वर से हटाएं (डंप फ़ाइल को न हटाएं! यह आपका बैकअप है!)
- एक नया डेटाबेस बनाएं जिसे आप पुनर्प्राप्त करना चाहते हैं।
mysqldump
आयात करें नए डेटाबेस में बैकअप लें।
और आपको किया जाना चाहिए।