كيفية عمل نسخ احتياطي، استعادة، وترحيل قاعدة بيانات MongoDB على Ubuntu 20.04

اختار المؤلف صندوق الإغاثة من جائحة COVID-19 ليتلقى تبرعًا كجزء من برنامج Write for Donations.

مقدمة

مونغو دي بي هو واحد من أشهر محركات قواعد البيانات NoSQL. اشتهر بكونه قابلاً للتوسيع وقويًا وموثوقًا وسهل الاستخدام. قواعد بيانات. اشتهر بكونه قابلاً للتوسيع وقويًا وموثوقًا وسهل الاستخدام. في هذه المقالة، ستقوم بنسخ احتياطي، واستعادة، وترحيل قاعدة بيانات MongoDB عينية.

استيراد وتصدير قاعدة بيانات يعني التعامل مع البيانات في تنسيق قابل للقراءة من قبل الإنسان يتوافق مع منتجات البرمجيات الأخرى. على عكس ذلك، تقوم عمليات نسخ احتياطي واستعادة MongoDB بإنشاء بيانات ثنائية محددة لـ MongoDB أو استخدامها، مما يحافظ ليس فقط على اتساق وسلامة بياناتك ولكن أيضًا على سمات MongoDB الخاصة بها. لذلك، في حالة الترحيل، من المفضل عادةً استخدام النسخ الاحتياطي والاستعادة طالما كانت الأنظمة المصدر والهدف متوافقة.

المتطلبات المسبقة

قبل اتباع هذا البرنامج التعليمي، يرجى التأكد من إكمال المتطلبات الأساسية التالية:

ما لم يُشار إلى خلاف ذلك، يجب تشغيل جميع الأوامر التي تتطلب صلاحيات الجذر في هذا البرنامج التعليمي كمستخدم غير جذري لديه صلاحيات sudo.

الخطوة 1 — استخدام JSON وBSON في MongoDB

قبل المتابعة مع هذا المقال بشكل أعمق، يُطلب بعض الفهم الأساسي للموضوع. إذا كنت تمتلك خبرة في أنظمة قواعد البيانات NoSQL الأخرى مثل Redis، قد تجد بعض التشابهات عند العمل مع MongoDB.

يستخدم MongoDB تنسيقي JSON وBSON (Binary JSON) لتخزين معلوماته. JSON هو التنسيق القابل للقراءة من قبل الإنسان والذي يعتبر مثاليًا لتصدير البيانات وبعد ذلك استيرادها. يمكنك إدارة البيانات التي تم تصديرها بمزيد من الفعالية باستخدام أي أداة تدعم JSON، بما في ذلك محرر النصوص البسيط.

مثال على مستند بامتداد .json يبدو كالتالي:

Example of JSON Format
{"address":[
    {"building":"1007", "street":"Park Ave"},
    {"building":"1008", "street":"New Ave"},
]}

JSON مريح للعمل معه، ولكنه لا يدعم كل أنواع البيانات المتاحة في BSON. هذا يعني أنه سيكون هناك ما يُعرف بفقدان الدقة في المعلومات إذا استخدمت JSON. لغرض عمليات النسخ الاحتياطي واستعادة البيانات، من الأفضل استخدام BSON الثنائي.

ثانيًا، لا داعي للقلق بشأن إنشاء قاعدة بيانات MongoDB بشكل صريح. إذا لم تكن القاعدة التي حددتها للاستيراد موجودة بالفعل، فإنها ستتم إنشاؤها تلقائيًا. والأفضل من ذلك حالة الهيكل الخاص بالمجموعات (جداول قواعد البيانات). على عكس محركات قواعد البيانات الأخرى، في MongoDB، يتم إنشاء الهيكل مرة أخرى تلقائيًا عند إدراج أول مستند (صف في قاعدة البيانات).

ثالثًا، في MongoDB، قراءة أو إدراج كميات كبيرة من البيانات، مثل مهام هذه المقالة، يمكن أن تكون مُستهلكة للموارد وتستهلك الكثير من وحدة المعالجة المركزية، والذاكرة، ومساحة القرص. هذا أمر حرج خاصةً أن MongoDB يُستخدم بشكل متكرر لقواعد بيانات كبيرة وبيانات كبيرة. أبسط حلاً لهذه المشكلة هو تشغيل عمليات التصدير والنسخ الاحتياطي خلال الليل أو خلال ساعات الذروة.

الرابع، يمكن أن تكون اتساق المعلومات مشكلة إذا كان لديك خادم MongoDB مشغول حيث تتغير المعلومات أثناء عملية تصدير أو نسخ قاعدة البيانات. إحدى الحلول الممكنة لهذه المشكلة هي التكرار، والتي قد تنظر فيها عندما تتقدم في موضوع MongoDB.

بينما يمكنك استخدام وظائف الاستيراد والتصدير لنسخ احتياطي واستعادة بياناتك، هناك طرق أفضل لضمان سلامة بياناتك في قواعد بيانات MongoDB. لنسخ احتياطي لبياناتك، يجب استخدام الأمر mongodump. للاستعادة، استخدم mongorestore. دعنا نرى كيف تعمل.

الخطوة ٢ — استخدام mongodump لعمل نسخة احتياطية لقاعدة بيانات MongoDB

دعنا نغطي أولاً عملية نسخ احتياطي لقاعدة بيانات MongoDB الخاصة بك.

الحجة الأساسية لـ mongodump هي --db ، الذي يحدد اسم قاعدة البيانات التي ترغب في إنشاء نسخة احتياطية منها. إذا لم تحدد اسم قاعدة بيانات ، فإن mongodump سيقوم بإنشاء نسخ احتياطية لجميع قواعد البيانات الخاصة بك. الحجة الثانية المهمة هي --out ، التي تحدد الدليل الذي سيتم فيه حفظ البيانات. على سبيل المثال، دعنا نقم بعمل نسخة احتياطية من قاعدة البيانات newdb وحفظها في الدليل /var/backups/mongobackups. في الوقت المثالي، سيكون لدينا كل من النسخ الاحتياطية في دليل يحمل تاريخ اليوم مثل /var/backups/mongobackups/10-29-20.

أولاً قم بإنشاء هذا الدليل /var/backups/mongobackups:

  1. sudo mkdir /var/backups/mongobackups

ثم قم بتشغيل mongodump:

  1. sudo mongodump --db newdb --out /var/backups/mongobackups/$(date +'%m-%d-%y')

سترى ناتجًا مشابهًا لهذا:

Output
2020-10-29T19:22:36.886+0000 writing newdb.restaurants to 2020-10-29T19:22:36.969+0000 done dumping newdb.restaurants (25359 documents)

لاحظ أنك استخدمت في مسار الدليل السابق date +'%m-%d-%y' للحصول تلقائيًا على تاريخ اليوم. هذا سيتيح لك إنشاء نسخ احتياطية داخل الدليل مثل /var/backups/10-29-20/ ، مما يجعله مريحًا بشكل خاص لأتمتة عمليات النسخ الاحتياطي.

في هذه النقطة، لديك نسخة احتياطية كاملة من قاعدة البيانات newdb في الدليل /var/backups/mongobackups/10-29-20/newdb/. تحتوي هذه النسخة الاحتياطية على كل ما يلزم لاستعادة قاعدة البيانات newdb بشكل صحيح والحفاظ على “الموثوقية” الخاصة بها.

كقاعدة عامة، يجب عليك عمل نسخ احتياطية بانتظام ، مفضلة عندما يكون الخادم أقل حملاً. بالتالي، يمكنك تعيين أمر mongodump كوظيفة cron بحيث يعمل بانتظام، مثل كل يوم في الساعة 03:03 صباحًا.

لتحقيق ذلك، افتح crontab، محرر cron:

  1. sudo crontab -e

عند تشغيل sudo crontab، ستقوم بتحرير وظائف الـ cron لمستخدم الجذر. يُنصح بهذا لأنه إذا قمت بتعيين الـ crons لمستخدمك، قد لا تعمل بشكل صحيح، خاصة إذا كان ملف تعريف sudo الخاص بك يتطلب التحقق من كلمة المرور.

داخل برنامج الـ crontab، أدخل الأمر التالي mongodump:

crontab
  1. 3 3 * * * mongodump --out /var/backups/mongobackups/$(date +'\%m-\%d-\%y')

في الأمر أعلاه، نحذف الوسم --db بقصد لأنك عادة ما تريد نسخ احتياطي لكل قواعد البيانات الخاصة بك. أيضاً، يجب تهيئة الرمز الخاص % للامتثال لصيغة الـ cron.

اعتمادًا على أحجام قواعد بيانات MongoDB الخاصة بك، قد تنفد من مساحة القرص بسبب النسخ الاحتياطي الزائد. لذا يُنصح أيضًا بتنظيف النسخ الاحتياطية القديمة بانتظام أو ضغطها.

على سبيل المثال، لحذف جميع النسخ الاحتياطية القديمة بعمر يزيد عن سبعة أيام، يمكنك استخدام الأمر النصي التالي:

  1. find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} \;

بالمثل لأمر الـ mongodump السابق، يمكنك أيضًا إضافة هذا كوظيفة cron. يجب أن يتم تشغيلها قبل بدء النسخ الاحتياطي التالي؛ لمهمة الساعة 03:03 صباحًا، سيتم تشغيل هذا الحذف في الساعة 03:01 صباحًا. افتح crontab مرة أخرى:

  1. sudo crontab -e

أدخل السطر التالي:

crontab
  1. 1 3 * * * find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} \;

احفظ وأغلق الملف.

إكمال جميع المهام في هذه الخطوة سيضمن حلاً مناسبًا للنسخ الاحتياطي لقواعد بيانات MongoDB الخاصة بك. في الخطوة التالية، ستقوم باستعادة قاعدة البيانات.

الخطوة 3 — استخدام mongorestore لاستعادة وترحيل قاعدة بيانات MongoDB

عندما تقوم بإستعادة قاعدة بيانات MongoDB الخاصة بك من نسخة احتياطية سابقة، ستحصل على نسخة دقيقة من معلومات MongoDB الخاصة بك التي تم التقاطها في وقت معين، بما في ذلك جميع الفهارس وأنواع البيانات، وهو مفيد بشكل خاص عندما تريد ترحيل قواعد بيانات MongoDB الخاصة بك. لاستعادة MongoDB، سنستخدم أمر mongorestore، الذي يعمل مع النسخ الاحتياطية الثنائية التي ينتجها mongodump.

لنواصل أمثلتنا مع قاعدة البيانات newdb ونرى كيف يمكننا استعادتها من النسخة الاحتياطية التي تم أخذها سابقًا. سنحدد أولاً اسم قاعدة البيانات باستخدام الوسيطة --nsInclude. سنستخدم newdb.* لاستعادة جميع المجموعات. لاستعادة مجموعة واحدة مثل restaurants، استخدم newdb.restaurants بدلاً من ذلك.

ثم، باستخدام --drop، سنتأكد من أن قاعدة البيانات الهدف تم حذفها أولاً بحيث يتم استعادة النسخة الاحتياطية في قاعدة بيانات نظيفة. كمعلمة نهائية سنحدد دليل النسخ الاحتياطي الأخير، والذي سيبدو مثل هذا: /var/backups/mongobackups/10-29-20/newdb/.

بمجرد أن تحصل على نسخة احتياطية مؤرخة، يمكنك استعادتها باستخدام هذا الأمر (مع تحديث التاريخ ليتطابق مع الخاص بك):

  1. sudo mongorestore --db newdb --drop /var/backups/mongobackups/10-29-20/newdb/

سترى إخراجًا مثل هذا:

Output
2020-10-29T19:25:45.825+0000 the --db and --collection args should only be used when restoring from a BSON file. Other uses are deprecated and will not exist in the future; use --nsInclude instead 2020-10-29T19:25:45.826+0000 building a list of collections to restore from /var/backups/mongobackups/10-29-20/newdb dir 2020-10-29T19:25:45.829+0000 reading metadata for newdb.restaurants from /var/backups/mongobackups/10-29-20/newdb/restaurants.metadata.json 2020-10-29T19:25:45.834+0000 restoring newdb.restaurants from /var/backups/mongobackups/10-29-20/newdb/restaurants.bson 2020-10-29T19:25:46.130+0000 no indexes to restore 2020-10-29T19:25:46.130+0000 finished restoring newdb.restaurants (25359 documents) 2020-10-29T19:25:46.130+0000 done

في الحالة أعلاه، نقوم باستعادة البيانات على نفس الخادم الذي أنشأنا فيه النسخ الاحتياطي. إذا كنت ترغب في نقل البيانات إلى خادم آخر واستخدام نفس التقنية، يجب عليك نسخ دليل النسخ الاحتياطي، والذي هو /var/backups/mongobackups/10-29-20/newdb/ في حالتنا، إلى الخادم الآخر.

الاستنتاج

لقد قمت الآن بأداء بعض المهام الأساسية المتعلقة بعمليات النسخ الاحتياطي، واستعادة البيانات، ونقل قواعد بيانات MongoDB الخاصة بك. لا ينبغي أبدًا تشغيل خادم MongoDB في الإنتاج بدون استراتيجية نسخ احتياطي موثوقة، مثل تلك الموصوفة هنا.

يمكنك العثور على مزيد من البرامج التعليمية حول كيفية تكوين واستخدام MongoDB في هذه مقالات مجتمع DigitalOcean. نشجعك أيضًا على التحقق من وثائق MongoDB الرسمية، حيث إنها مصدر رائع للمعلومات حول الإمكانيات التي يوفرها MongoDB.

Source:
https://www.digitalocean.com/community/tutorials/how-to-back-up-restore-and-migrate-a-mongodb-database-on-ubuntu-20-04