วิธีคัดลอกฐานข้อมูล MongoDB โดยใช้ PHP ทันทีที่ copydb เลิกใช้แล้ว


10

ใน MongoDB เวอร์ชัน 4.2 copydbและcopyDatabasewrapper ได้ถูกเลิกใช้แล้ว คู่มือ MongoDB แสดงให้เห็นว่าตอนนี้เราควรใช้และmongodump mongorestoreแต่ฉันเรียกคำสั่ง copy จาก PHP โดยใช้ไดรเวอร์ PHP MongoDB และคำสั่ง dump และ restore เป็นคำสั่งที่ต้องรันจาก command line และไม่มี PHP เทียบเท่า ตอนนี้ฉันจะคัดลอกฐานข้อมูลโดยใช้ PHP ได้อย่างไร


1
แม้ว่าจะเป็นไปได้ที่จะเรียกใช้ mongodump / mongorestore จาก PHP ด้วยฟังก์ชั่นประเภท shell_exec ก็เป็นไปได้ยากที่จะดาวน์โหลดฐานข้อมูลทั้งหมดไปยังไคลเอนต์แล้วอัปโหลดกลับคืน
Alex Blex

ฉันเดาว่าฉันไม่เข้าใจขั้นตอนการทำงานของคุณ คุณเพียงต้องการสร้างการสำรองข้อมูล / เรียกคืน db บนเครื่องหรือคุณต้องการจัดทำ / ดาวน์โหลดไฟล์เดียวกันผ่านเว็บไซต์ / บริการ (ผ่าน php)
mrgremlin

ฉันต้องการคัดลอกฐานข้อมูลเพื่อวัตถุประสงค์ในการทดสอบ เรามีฐานข้อมูลพร้อมการตั้งค่าเริ่มต้นทั้งหมดสำหรับการทดสอบและฉันต้องการคัดลอกไปยังฐานข้อมูลการทดสอบก่อนที่จะทำการทดสอบ สิ่งนี้มักเริ่มต้นจากระยะไกลผ่านคำขอที่จัดการโดย PHP
Carlos Granados

1
เพียงชี้แจงว่าเหตุใดโซลูชั่นภายในบางอย่างจึงยอดเยี่ยม: ในระบบอย่าง Debian หรือ Alpine (ในเวอร์ชันเดิมที่ยังคงมีการจัดส่ง MongoDB) คุณต้องติดตั้งแพ็กเกจอื่นสำหรับเครื่องมือเชลล์เพิ่มเติม สิ่งเหล่านี้อาจไม่ปรากฏในทุกระบบที่มีการติดตั้ง MongoDB
Nico Haase

คำตอบ:


3

คุณสามารถใช้ "mongodump" และ "mongorestore" ตามที่คุณกล่าวถึงเช่นกัน ใน PHP คุณสามารถใช้ shell_exec เพื่อเรียกใช้คำสั่ง ตัวอย่างเช่น:

$backUpCommand = "mongodump --archive='/tmp/mongodump-dev-db' --db=dev";
shell_exec($backUpCommand);

$restoreCommand = "mongorestore --archive='/tmp/mongodump-dev-db' --db=test --nsFrom='test.*' --nsTo='examples.*'";
shell_exec($restoreCommand);

โปรดทราบ nsFrom และ nsTo คือการเปลี่ยนชื่อเนมสเปซถ้าคุณต้องการ ดูรายละเอียดเพิ่มเติมที่นี่

ในกรณีที่คุณต้องการคัดลอกดัมพ์ไปยังโฮสต์อื่นให้ลองรวม --host params ของ mongorestore ดังนั้นในกรณีนั้นคำสั่งกู้คืนของคุณจะเป็น:

$restoreCommand = "mongorestore --host=mongodb1.example.net --port=27017 --username=user --password=$PSWD --authenticationDatabase=admin --archive='/tmp/mongodump-dev-db' --db=test";
shell_exec($restoreCommand);

1
เป็นไปได้ แต่มีความซับซ้อนอย่างมากในการตั้งค่าแอปพลิเคชันด้วยการพึ่งพา CLI ภายนอกมันจะต้องสำรองพื้นที่ SDD ที่สำคัญบนเซิร์ฟเวอร์แอปพลิเคชันทั้งหมดเพื่อถ่ายโอนฐานข้อมูล (หลายครั้งในกรณีที่มีคำขอที่เกิดขึ้นพร้อมกัน) ช้า. กล่าวอีกนัยหนึ่ง - มันก็โอเคสำหรับงานที่ทำด้วยมือครั้งเดียว แต่ไม่ใช่สำหรับระบบการผลิต
Alex Blex

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