Mongodump: ฟิลด์ 'สแนปชอต' ที่ไม่รู้จัก


33

ฉันใช้ mongodump จากเครื่องมือ mongo เพื่อดาวน์โหลดสำเนาสำรองของเซิร์ฟเวอร์ของฉัน อย่างไรก็ตามในขณะที่ฉันเรียกใช้คำสั่งคำสั่งจะส่งคืน "snapshot" ของฟิลด์ที่ไม่รู้จัก

ข้อผิดพลาดทั้งหมดคือ:

Failed: error reading collection: Failed to parse: { find: "data", skip: 0, snapshot: true, $readPreference: { mode: "secondaryPreferred" }, $db: "xxx" }. Unrecognized field 'snapshot'.

Mongodump - รุ่นที่ส่งคืน:

mongodump version: built-without-version-string
git version: built-without-git-spec
Go version: go1.7.3
   os: linux
   arch: amd64
   compiler: gc
OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016

ฉันอาจต้องปรับลดรุ่นของฉัน มิฉะนั้นไม่แน่ใจว่าจะไปจากที่นี่ ...


1
รุ่นของเซิร์ฟเวอร์ O / S และ MongoDB ของคุณคืออะไร? mongodump --versionผลลัพธ์ของคุณแนะนำให้คุณสร้างเครื่องมือจากแหล่งที่มาดังนั้นจึงไม่ชัดเจนว่า MongoDB รุ่นใดที่อาจสอดคล้องกัน ฉันขอแนะนำให้ดาวน์โหลดไบนารีอย่างเป็นทางการถ้าเป็นไปได้
Stennie

1
ฉันพบปัญหาเดียวกันฉันคิดว่าเป็นเพราะฉันใช้ mongoexport 3.6.4 กับเซิร์ฟเวอร์ mongoDB 4.0
แอนทอน

คำตอบ:


13

แน่นอนว่าคุณมีความแตกต่างของเวอร์ชั่นระหว่าง mongodump กับเซิร์ฟเวอร์ mongoDB ของคุณ (3.6 vs 4.0)

คุณสามารถใช้นักเทียบท่าเพื่อช่วยเหลือ:

docker run --rm -v $(pwd):/workdir/ -w /workdir/ mongo:4.0 mongodump -h server -d $database --out /workdir/dump/

ด้วยนักเทียบท่าคุณสามารถใช้เครื่องมือ cli รุ่นที่แม่นยำโดยไม่ต้องติดตั้ง

คุณสามารถระบุนามแฝง (ใน. bashrc):

alias mongodump="docker run --rm -v $(pwd):/workdir/ -w /workdir/ mongo:4.0 mongodump"

หมายเหตุ:โฟลเดอร์ที่บันทึกดัมพ์นั้นจำเป็นต้องมีสิทธิ์ในการเขียนดังนั้นผู้ใช้ mongodb ในคอนเทนเนอร์สามารถเขียนไปยังไดรฟ์ข้อมูลที่เมาท์ได้ สิ่งนี้สามารถทำได้โดยการตั้งค่าการอนุญาตในโฟลเดอร์ dump ก่อนที่จะรันคำสั่งด้านบน

ในตัวอย่างด้านบนจะเป็น: mkdir -m 777 dump. หลังจากการถ่ายโอนข้อมูลเสร็จสมบูรณ์แล้วการอนุญาตสามารถแก้ไขกลับเป็นปกติ (เช่น, sudo chmod 755 dump)


1
Failed: error dumping metadata: error creating directory for metadata file dump/{COLLECTION}: mkdir dump: permission deniedฉันได้รับข้อผิดพลาด ฉันพยายามด้วย-u 0และ-o /tmp/dumpแต่ไม่สามารถรับมันในการทำงาน ในที่สุดฉันก็ลงเอยด้วยการเริ่มต้นคอนเทนเนอร์การเรียกใช้การถ่ายโอนข้อมูลจากนั้นคัดลอกออกจากคอนเทนเนอร์ ความคิดใดที่ฉันผิดไปกับหนึ่งซับ?
บุคคลที่สาม

1
คุณต้องตั้งค่า uid อย่างเหมาะสม:docker run --rm -v $(pwd):/workdir/ -w /workdir/ -u $(id -u) mongo:4.0 mongodump ...
ltn100

55

เพิ่ม --forceTableScan

ตัวอย่าง:

mongodump --forceTableScan -d database_name -o target_directory

http://aug2uag.blogspot.com/2018/08/mongoexport-unrecognized-field-snapshot.html


สิ่งนี้ใช้ได้สำหรับฉัน ขอบคุณ
Tarang Bhalodia

คุณกรุณาอธิบายว่าข้อผิดพลาดมีความหมายอย่างไรและทำไมข้อโต้แย้งนี้ถึงช่วยได้มาก
F3L1X79
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.