PHP का उपयोग करके MongoDB डेटाबेस की प्रतिलिपि कैसे बनाएं अब कॉपिडब को हटा दिया गया है


10

MongoDB संस्करण में 4.2 copydbऔर इसके copyDatabaseआवरण को हटा दिया गया है। MongoDB मैनुअल बताता है कि हमें अब इसका उपयोग करना चाहिए mongodumpऔर mongorestore। लेकिन मैं PHP MongoDB ड्राइवर का उपयोग करके PHP से कॉपी कमांड को कॉल कर रहा था और डंप और रीस्टोर कमांड ऐसे कमांड हैं जिन्हें कमांड लाइन से चलाने की आवश्यकता है और जिनके पास कोई PHP समकक्ष नहीं है। अब मैं PHP का उपयोग करके डेटाबेस की प्रतिलिपि कैसे बना सकता हूं?


1
यहाँ तक कि यह संभव नहीं है कि PHP से mongodump / mongorestore को shell_exec तरह के फंक्शंस से चलाया जाए, क्लाइंट के लिए पूरे डेटाबेस को डाउनलोड करना और फिर उसे अपलोड करना संभव नहीं है।
एलेक्स Blex

मुझे लगता है कि मुझे आपके वर्कफ़्लो की समझ नहीं है। क्या आप बस एक db बैकअप बनाना चाहते हैं / मशीन पर पुनर्स्थापित करना चाहते हैं या क्या आप वेबसाइट / सेवा (php के माध्यम से) के माध्यम से उसी का अप / डाउनलोड प्रदान करना चाहते हैं?
मॉर्ग्रेमलिन

मैं परीक्षण उद्देश्यों के लिए एक डेटाबेस की प्रतिलिपि बनाना चाहता हूं। हमारे पास परीक्षण के लिए हमारे सभी प्रारंभिक सेटअप के साथ एक डेटाबेस है और मैं परीक्षण चलाने से पहले इसे परीक्षण डेटाबेस में कॉपी करना चाहता हूं। यह आमतौर पर PHP द्वारा संचालित अनुरोध के माध्यम से दूरस्थ रूप से शुरू किया गया था
कार्लोस ग्रानडोस

1
बस यह स्पष्ट करने के लिए कि कुछ आंतरिक समाधान महान क्यों होगा: डेबियन या अल्पाइन जैसी प्रणालियों पर (पूर्व संस्करणों में जो अभी भी मोंगोबीडी को भेजते हैं), आपको अतिरिक्त शेल टूल के लिए एक और पैकेज स्थापित करना होगा। ये सभी सिस्टम पर मौजूद नहीं हो सकते हैं, जिसमें एक रनिंग मोंगोबीडी सेटअप है
निको हसे

जवाबों:


3

आप "मोंगोडम्प" और "मोंगोरेस्टोर" का उपयोग कर सकते हैं जैसा कि आपने उल्लेख किया है। 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 पार्म्स के संयोजन की कोशिश करें। तो, उस स्थिति में, आपका पुनर्स्थापना आदेश होगा:

$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
यह संभव है, लेकिन यह बाहरी सीएलआई निर्भरता के साथ महत्वपूर्ण रूप से एप्लिकेशन सेटअप को जटिल करता है, इसे डेटाबेस को डंप करने के लिए सभी एप्लिकेशन सर्वरों पर महत्वपूर्ण एसडीडी स्थान आरक्षित करना होगा (समवर्ती अनुरोधों के मामले में कई बार), यह डेटा ट्रांसफर लागतों को भड़काएगा और काफी हो सकता है धीमी गति से। दूसरे शब्दों में - यह एक बंद मैनुअल नौकरी के रूप में ठीक है, लेकिन उत्पादन प्रणालियों के लिए नहीं।
एलेक्स Blex

एलेक्स Blex से सहमत हैं। यह "समाधान" पिछले विकल्प की तुलना में सिर्फ 100% अधिक जटिल है
कार्लोस ग्रान्डोस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.