สำรองข้อมูลด้วย mongoexport หรือ mongodump?


9

สำหรับการสำรองข้อมูลการผลิต MongoDB แนะนำMongoDumpแทนMongoexportเพื่อความถูกต้องของข้อมูล อย่างไรก็ตามฉันจะต้อง "ขัดข้อมูล" ออกจากฐานข้อมูล MongoDB ก่อนสำรองข้อมูล ผมไม่ทราบข้อมูลด้านเซิร์ฟเวอร์ใดตัวเลือกอื่น ๆ กว่าขัดmongoexport สองคำถาม:

  1. ไม่mongoexportเข้าถึง MongoDB แคชในแรม? มันจะเปลี่ยนชุดการทำงานใน RAM เหมือนmongodumpหรือไม่?
  2. mongodumpคำสั่งมีนี้--queryตัวเลือก "จัดเตรียมเอกสาร JSON เป็นเคียวรีที่ จำกัด ทางเลือกเอกสารที่รวมในเอาต์พุตของ mongodump" ต้องใช้แบบสอบถามเพื่อแยกเขตข้อมูลบางอย่างในเอกสารหรือไม่

1
ดูเหมือนว่าคุณกำลังมองหาการส่งออกมากกว่าการสำรองข้อมูล หากคุณส่งออกบางส่วนของฟิลด์คุณจะไม่สามารถกู้คืนได้และมีฐานข้อมูลที่ใช้งานได้อย่างสมบูรณ์ มีตัวเลือกอื่น ๆ ให้พิจารณา: เข้ารหัสฟิลด์ใด ๆ ด้วยข้อมูลที่ละเอียดอ่อน (ผ่านรหัสแอปพลิเคชัน) เพื่อให้คุณสามารถmongodumpสำรองข้อมูลสแน็ปช็อตตามปกติหรือระบบไฟล์หรือเขียนการmongoexportเอ็กซ์ปอร์ตแบบกำหนดเองหากไม่ต้องการ เครื่องมือหรือโปรแกรมใด ๆ ที่อ่านข้อมูลmongodสามารถแก้ไขชุดการทำงานของคุณหากข้อมูลของคุณเพื่อส่งออกมีขนาดใหญ่กว่า RAM ที่มีประโยชน์ ภาพรวมของระบบไฟล์ก่อกวนน้อยลง
Stennie

ขอบคุณสำหรับการชี้แจง การเข้ารหัสในฟิลด์เป็นสิ่งที่ฉันไม่ได้คิดคำแนะนำที่ดี
Howard Lee

คำตอบ:


6

ในฐานะที่เป็นคำตอบสำหรับคำถามแรกของคุณเครื่องมือทั้งสอง (ตามค่าเริ่มต้น) จะเดิน_idดัชนีเพื่อดึงข้อมูลแล้วเขียนลงในดิสก์ ดังนั้นใช่เครื่องมือทั้งสองจะส่งผลกระทบต่อชุดการทำงานของคุณในทำนองเดียวกันซึ่งเป็นสาเหตุที่ฉันขอแนะนำให้ใช้เครื่องมือเหล่านี้กับเครื่องมือสำรอง (โดยเฉพาะอย่างยิ่งอุปกรณ์เสริมรองหากเป็นไปได้) ฉันจะสะท้อน Stennie ในความคิดเห็นที่นี่และแนะนำวิธีการสำรองข้อมูลอื่น ๆ ถ้าคุณกำลังจัดการกับข้อมูลจำนวนมาก

สำหรับคำถามที่สองฉันถือว่าคุณกำลังมองหาตัวเลือกที่mongodumpเทียบเท่ากับการถ่ายโอนข้อมูลเฉพาะเขตข้อมูล ตัวเลือกแบบสอบถามสามารถใช้ในการกรองผลการค้นหา แต่ไม่สามารถใช้ร่วมกับโปรเจค (เพื่อเลือกเขตข้อมูลที่ส่งกลับ) - นี่เป็นคำขอคุณลักษณะที่มีการติดตามในTOOLS-28แต่ยังไม่ได้กำหนดไว้ ดังที่ Stennie กล่าวถึงตัวเลือกอื่น ๆ ที่นี่คือการเขียนผู้ส่งออกที่กำหนดเองที่เหมาะกับความต้องการของคุณ (และอีกครั้งฉันขอแนะนำให้คุณใช้มันกับอุปกรณ์สำรองเพื่อปกป้องชุดการทำงานของคุณ)--fieldsmongoexport


6
  1. (ขอโทษ dunno)

  2. - แบบสอบถามจะเลือกหรือยกเว้นเอกสารทั้งหมดไม่ใช่ฟิลด์

มันจะเป็นความคิดที่ดีแม้ว่า:

--query '{datetime:{$gt:ISODate("2014-01-01T00:00:00.000Z")}},{_id:0,name:1,address:1,interests:1}'* )
  1. Mongodumpใช้โครงสร้างไฟล์ bson และรักษาชนิดข้อมูล Mongoexportจะสูญเสียชนิดข้อมูลของค่า เช่น NumberLong ("1431677405876") จะถูกแปลงเป็นเพียง 1431677405876 นั่นคือเหตุผลที่ mongodump แนะนำถ้าคุณต้องการนำเข้ากลับไป MongoDB

ขอบคุณสำหรับคำชี้แจงของคุณใน - แบบสอบถามและตัวอย่างของการสูญเสียข้อมูล mongoexport
Howard Lee

0

Mongoexport จริง ๆ แล้วรักษาชนิด แต่มันทำให้ข้อมูลไม่สอดคล้องกัน หากคุณกำลังส่งออกฟิลด์ด้วย Ints and Longs มันจะส่งออกเป็นวัตถุ Numbers และ JSON ตามลำดับซึ่งจะทำให้ถนนยากขึ้น

"โหมดเข้มงวดการแทนโหมดเข้มงวดของประเภท BSON สอดคล้องกับ JSON RFC ตัวแยกวิเคราะห์ JSON ใด ๆ สามารถแยกการแทนโหมดเข้มงวดเหล่านี้เป็นคู่ของคีย์ / ค่าอย่างไรก็ตามตัวแยกวิเคราะห์ JSON ภายใน MongoDB เท่านั้นที่รู้จักข้อมูลประเภทที่ถ่ายทอดโดยรูปแบบ"

https://docs.mongodb.com/manual/reference/mongodb-extended-json/

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