क्या .ns और .0, .1, 1 से MongoDB डेटाबेस को पुनर्प्राप्त करना संभव है। … फाइलें?


14

मैं Ubuntu 12.10 पर एक MongoDB 2.0.4 स्थापना है। हाल ही में मुझे बाहर से डेटाबेस से जुड़ने में कुछ समस्याएं हुईं, और लगा कि कुछ ऐसा है जो MongoDB को सही तरीके से शुरू करने से रोकता है। जैसा कि कई स्रोतों पर सुझाव दिया गया है (देखें StackOverflow) मैंने हटाया /var/lib/mongodb/mongodb.lockऔर भाग गया mongod --repair। इससे समस्या का समाधान नहीं हुआ, MongoDB नहीं चलेगा और लॉक फाइल्स बनाता रहा जिसे उसने बाद में हटाने का ध्यान नहीं रखा। लॉग को देखकर, मुझे एहसास हुआ कि इसका नाम कुछ फ़ोल्डर तक पहुंच नहीं है $tmpSomething, इसलिए (चूंकि नाम ने एक अस्थायी फ़ोल्डर का सुझाव दिया था) मैंने इसे हटा दिया, और बाद में यह सब काम किया ... इस तथ्य को छोड़कर कि मेरे पास केवल एक है दृष्टि में मेरे पिछले डेटाबेस, जबकि अन्य अभी भी हैं क्योंकि मेरा /var/lib/mongodb/फ़ोल्डर अभी भी भरा हुआ है.ns .0 .1 .nफ़ाइलें जो वजन बहुत अधिक हैं। क्या डेटाबेस में उन्हें पुनर्स्थापित करने का कोई तरीका है? (मैं mongorestore के साथ कोशिश की है, लेकिन जैसा कि मैं उम्मीद कर रहा था, यह उन फ़ाइलों को संभाल नहीं करता है)।

धन्यवाद

जवाबों:


19

.ns .0 .1आदि फ़ाइलें डेटा खुद को फाइल कर रहे हैं। यदि आपने उस फ़ोल्डर को इंगित करने वाले तर्क के mongodसाथ एक उदाहरण शुरू किया है --dbpath, या यदि आपने सामग्री को कहीं और स्थानांतरित किया है और वहां इंगित करने के लिए विकल्प का उपयोग किया है, तो मोंगॉड उन्हें सामान्य रूप से पढ़ने का प्रयास करेगा।

चूँकि आपके मुद्दे भ्रष्टाचार और / या कुछ और मुद्दे शुरू करने का सुझाव देते हैं mongod(आपको वास्तव में स्टार्टअप संदेशों को लॉग फ़ाइलों को पोस्ट करना चाहिए, शायद उस मुद्दे को संबोधित करने के लिए एक अलग प्रश्न में), तो विकल्प हैं। संदर्भ के लिए, सबसे आम समस्याएं संबंधित अनुमतियाँ हैं, खासकर जब लोग मैन्युअल रूप से (स्वयं के रूप में) या सुडो (रूट के रूप में) को शुरू करने की कोशिश करते हैं और विभिन्न निर्देशिकाओं में समस्याग्रस्त अनुमति देते हैं।

आप सही हैं कि mongorestoreइन डेटा फ़ाइलों का सीधे उपयोग नहीं कर सकते, लेकिन mongodumpउन्हें पढ़ सकते हैं और उन डेटा को BSON फ़ाइलों में डंप कर सकते हैं जो mongorestoreउम्मीद करते हैं।

यहां आप जो विकल्प चाहते हैं, वह dbpath है । आप अपने रास्ते का उल्लेख करते हैं /var/lib/mongo, इसलिए आप कुछ इस तरह से चला सकते हैं:

mongodump --dbpath /var/lib/mongo -d <database name> -o /path/to/put/files

वैकल्पिक रूप से आप --repairयहां भ्रष्ट परिस्थितियों को ठीक करने के लिए भ्रष्ट परिस्थितियों को ठीक करने के लिए भ्रष्टाचार का समाधान करने के लिए भी उपयोग कर सकते हैं । mongodumpपृष्ठ पर विभिन्न विकल्पों का वर्णन किया गया है :

http://docs.mongodb.org/manual/reference/mongodump/

एक बार जब आप फ़ाइलों को बाहर निकाल देते हैं, तो आप mongorestoreउन्हें दूसरे mongodउदाहरण में पुन: आयात करने के लिए उपयोग कर सकते हैं ।



2
मोंगो 3.0 के साथ एक विकल्प निर्दिष्ट फ़ाइलों के साथ मोंगो सर्वर को शुरू करना है: mongod --dbpath ./और फिर बिना मूंगदंप के आगे बढ़ें--dbpath
Shwaydogg

3
बस एक नोट, यदि आप Mongo 3.0 चला रहे हैं और mongod --dbpath ./आपको .ns .0फाइलों में डेटाबेस नहीं देते हैं , तो यह हो सकता है कि स्टोरेज इंजन पुराने MMapV1 इंजन के बजाय नए WiredTiger इंजन को डिफॉल्ट कर रहा हो। mongod --storageEngine mmapv1 --dbpath ./पुराने इंजन का उपयोग करके कनेक्ट करने के बजाय प्रयास करें ।
फ्लेमबॉड

1
किसी ने मुझे .ns, .0 और .1 फ़ाइलों को mongo 3.0 से डेटा माइग्रेट करने में मदद कर सकता है
मंदीप सिंह

1
जैसा कि @flamebaud ने कहा, डिफ़ॉल्ट इंजन बदल गया है। कृपया मानगो प्रलेखन में डिफ़ॉल्ट भंडारण इंजन परिवर्तन की जाँच करें । तुम भी WiredTiger भंडारण इंजन
लुडोविक Kuty
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.