मुझे MongoDB replicaset के लिए वृद्धिशील बैकअप सेट करने का काम दिया गया था, जैसा कि प्रारंभ बिंदु, निश्चित रूप से, मैंने इसे googled और MongoDB डॉक्स पर कुछ भी नहीं पाया, मुझे स्टैक फ़्लोफ़्लो पर यह प्रश्न मिला , जिसने अपना समाधान विकसित करने के लिए प्रोत्साहित किया। के रूप में तयरा को बहुत सक्रिय नहीं पाया।
मैंने इसके बारे में पढ़ा oplog
और महसूस किया कि लॉग को फिर से लिखने के लिए कुछ विकसित करना बहुत आसान था, लेकिन यह पता चलता है कि मेरे लिए ऐसा नहीं था mongorestore
।
अब मेरे पास बैश स्क्रिप्ट के साथ काम करने का एक समाधान है और यह काफी आसान था, यही कारण है कि मैं यहां पूछ रहा हूं कि क्या मेरे तर्क में कोई दोष है, या शायद कुछ ऐसा है जो मुझे भविष्य में काटेगा।
नीचे मैंने कैसे लागू किया है कि:
पूर्ण बैकअप प्रक्रिया
- एक माध्यमिक सदस्य पर ताला लिखता है
db.fsyncLock()
- स्नैपशॉट लें
ओपलॉग से अंतिम स्थिति रिकॉर्ड करें
db.oplog.rs.find().sort({$natural:-1}).limit(1).next().ts
अनलॉक लिखता है
db.fsyncUnlock()
वृद्धिशील बैकअप प्रक्रिया
- एक माध्यमिक सदस्य पर ताला लिखता है
पूर्ण (या नवीनतम वृद्धिशील) बैकअप पर रिकॉर्डेड ओप्लोग स्थिति से डंप करें:
mongodump --host <secondary> -d local -c oplog.rs -o /mnt/mongo-test_backup/1 --query '{ "ts" : { $gt : Timestamp(1437725201, 50) } }'
नवीनतम ओप्लोग स्थिति (पूर्ण बैकअप के लिए उसी तरह) रिकॉर्ड करें
- अनलॉक लिखता है
पूर्ण बैकअप बहाल प्रक्रिया
- के सभी उदाहरणों को रोकें
mongod
- कॉपी स्नैपशॉट को उस डेटा डायर के बॉक्स में रखें जो प्राथमिक होगा, लेकिन सभी को बाहर करना सुनिश्चित करें
local*
औरmongod.lock
इस पुनर्स्थापना तकनीक को दर्पण को तोड़कर पुन: कॉन्फ़िगर करना कहा जाता है - प्राथमिक शुरू करें
- पुन: कॉन्फ़िगर करें प्रतिकृतियां
- बिना किसी डेटा के सेकंडरी शुरू करें, उन्हें शुरुआती सिंक करने दें। या नए
local
डेटाबेस से नए डेटाबेस से डेटा की प्रतिलिपि बनाएँ
वृद्धिशील बैकअप पुनर्स्थापित करें
जब हमने वृद्धिशील बैकअप बनाया तो इसे इस तरह संग्रहीत किया:
/mnt/mongo-test_backup/1/local/oplog.rs.bson
/mnt/mongo-test_backup/1/local/oplog.rs.metadata.json
हम पर भरोसा कर रहे हैं, oplog.rs.bson
लेकिन हमें इसका नाम बदलना होगा, इसलिए यहां कदम हैं:
- निर्देशिका को बैकअप में बदलें:
cd /mnt/mongo-test_backup/1/local
- json फ़ाइल हटाएं
rm *.json
- बॉन फ़ाइल का नाम बदलें
mv oplog.rs.bson oplog.bson
इसे पुनर्स्थापित करें:
mongorestore -h <primary> --port <port> --oplogReplay /mnt/mongo-test_backup/1/local
मेरे पास यह सब स्क्रिप्ट है, मैं इसे बाद में GitHub पर कर सकता हूं।
सवाल यह है कि क्या तर्क में कोई दोष है? मैं थोड़ा संदिग्ध हूं क्योंकि प्रक्रिया काफी सीधी है और फिर भी मैं इसे कहीं भी प्रलेखित नहीं कर पाया।