เป็นไปได้หรือไม่ที่จะกู้คืนฐานข้อมูล MongoDB จาก. NS และ. 0, .1, ... ไฟล์


14

ฉันมีการติดตั้ง MongoDB 2.0.4 บน Ubuntu 12.10 เมื่อเร็ว ๆ นี้ฉันมีปัญหาในการเชื่อมต่อกับฐานข้อมูลจากภายนอกและคิดว่ามีบางอย่างที่ทำให้ 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 จะพยายามอ่านตามปกติ

เนื่องจากปัญหาของคุณแนะนำให้เกิดความเสียหายและ / หรือปัญหาอื่น ๆ ที่เริ่มต้นmongod(คุณควรโพสต์ไฟล์บันทึกข้อความเริ่มต้นจริงๆอาจเป็นคำถามที่แยกต่างหากเพื่อแก้ไขปัญหานั้น) จากนั้นจึงมีทางเลือกอื่น สำหรับการอ้างอิงปัญหาที่พบบ่อยที่สุดคือสิทธิ์ที่เกี่ยวข้องโดยเฉพาะอย่างยิ่งเมื่อคนพยายามที่จะเริ่ม mongod ด้วยตนเอง (เป็นตัวเอง) หรือด้วย sudo (เป็น root) และสร้างสิทธิ์ที่มีปัญหาในไดเรกทอรีต่างๆ

คุณถูกต้องที่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อินสแตนซ์อื่นได้


5
Mongodump 3.0+ ไม่ได้มีธง --dbpath
doub1ejack

2
ด้วย Mongo 3.0 ตัวเลือกคือการเริ่มต้นเซิร์ฟเวอร์ mongo ด้วยไฟล์ที่ระบุ: mongod --dbpath ./จากนั้นดำเนินการกับ mongodump โดยไม่ต้อง--dbpath
Shwaydogg

3
เพียงแค่ทราบหากคุณใช้งาน Mongo 3.0 และmongod --dbpath ./ไม่ได้ให้ฐานข้อมูลใน.ns .0ไฟล์อาจเป็นไปได้ว่าเอ็นจิ้นการจัดเก็บเริ่มต้นกับเอ็นจิ้น WiredTiger ใหม่แทนเอ็นจิ้น MMapV1 เก่า ลองmongod --storageEngine mmapv1 --dbpath ./เชื่อมต่อโดยใช้เอ็นจิ้นเก่าแทน
flamebaud

1
ทุกคนสามารถช่วยฉันย้ายข้อมูลจากไฟล์ .ns, .0 และ. 1 ไปยัง mongo 3.0 ได้ไหม
Mandeep Singh

1
ตามที่ @flamebaud กล่าวว่าเครื่องยนต์เริ่มต้นมีการเปลี่ยนแปลง โปรดตรวจสอบการเปลี่ยนแปลงเอ็นจิ้นการจัดเก็บข้อมูลเริ่มต้นในเอกสาร Mongo คุณอาจต้องการดูจุดเริ่มต้นของเอกสารที่WiredTiger Storage Engine
Ludovic Kuty
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.