আমাকে মোঙ্গোডিবি প্রতিরূপের জন্য বর্ধিত ব্যাকআপ সেটআপ করার জন্য কাজ দেওয়া হয়েছিল, শুরু করার পয়েন্ট হিসাবে অবশ্যই আমি এটি গুগল করেছিলাম এবং মঙ্গোডিবি ডক্সে কিছুই খুঁজে পাইনি, তবে স্ট্যাক ওভারফ্লোতে এই প্রশ্নটি পেয়েছি , যা আমার নিজস্ব সমাধান বিকাশ করতে উত্সাহিত করেছিল যেমনটি তায়ারাকে খুব সক্রিয় মনে হয়নি।
আমি পড়েছি 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
- জসন ফাইলটি মুছুন
rm *.json
- বিসন ফাইলটির নতুন নাম দিন
mv oplog.rs.bson oplog.bson
এটি পুনরুদ্ধার করুন:
mongorestore -h <primary> --port <port> --oplogReplay /mnt/mongo-test_backup/1/local
আমার এটির সমস্ত স্ক্রিপ্ট রয়েছে, আমি এটি পরে গিটহাবের কাছে সংঘটিত করতে পারি।
প্রশ্ন হচ্ছে যুক্তিটিতে কোনও ত্রুটি আছে কিনা? প্রক্রিয়াটি বেশ সোজা হয়ে যাওয়ার কারণে আমি কিছুটা সন্দেহজনক এবং এখনও আমি এটি কোথাও নথিভুক্ত করতে পারি নি।