MongoDB، یکی از محبوب‌ترین موتورهای پایگاه داده NoSQL است. مقیاس‌پذیری بودن، قدرتمند بودن، قابل اعتماد بودن و راحتی کار با آن، جزو ویژگی‌های بارز این ابزار پایگاه داده است. در این مقاله، نحوه پشتیبان گیری، بازیابی و انتقال یک نمونه پایگاه داده MongoDB برای شما شرح داده شده است.

 

منظور از import و export کردن یک پایگاه داده، عملیاتی است که در آن، داده‌ها به فرمت قابل خواندن توسط انسان تبدیل می‌شوند؛ بگونه‌ای که با سایر محصولات نرم افزاری سازگار باشند. در مقابل، عملیات پشتیبان گیری و بازیابی، داده‌های باینری خاص MongoDB را ایجاد یا استفاده می‌کند که قوام و یکپارچگی داده‌های شما و همچنین ویژگی‌های خاص MongoDB آن را حفظ می‌کند. بنابراین، برای انتقال معمولاً استفاده از نسخه پشتیبان و بازیابی ترجیح داده می‌شود؛ به شرطی که سیستم‌های مبدا و مقصد سازگار باشند.

دقت کنید که قبل از دنبال کردن این آموزش، به موارد زیر نیاز دارید:

  • یک Ubuntu 20.04 Droplet که شامل یک کاربر  غیر root با امتیازات sudo و یک فایروال باشد.
  • یک MongoDB که نصب و پیکربندی شده باشد.
  • نمونه پایگاه داده MongoDB که import شده باشد

دقت کنید که تمام دستورات این آموزش به امتیازات root احتیاج دارند. بنابراین، باید به عنوان یک کاربر غیر root با امتیاز sudo اجرا شوند.

 

این مطلب نیز ممکن است برای شما مفید باشد: نحوه import و export کردن پایگاه داده MongoDB در اوبونتو 20.04

 

مرحله 1 - استفاده از JSON و BSON در MongoDB

قبل از دنبال کردن این مقاله، به درک پایه دانش اولیه آن نیاز است. اگر تجربه استفاده از سایر سیستم‌های پایگاه داده NoSQL مانند Redis را دارید، ممکن است هنگام کار با MongoDB شباهت‌هایی را متوجه شوید.

MongoDB، برای ذخیره اطلاعات خود از فرمت‌های JSON و BSON (باینری JSON) استفاده می‌کند. JSON، در قالب قابل خواندن توسط انسان است که برای import و در نهایت export داده‌های شما مناسب است. شما می‌توانید داده‌های import شده خود را با هر ابزاری که از JSON پشتیبانی می‌نمایند، از جمله یک ویرایشگر متن ساده، مدیریت کنید.

به عنوان مثال یک سند json مشابه زیر است:

               Example of JSON Format

{"address":[
    {"building":"1007", "street":"Park Ave"},
    {"building":"1008", "street":"New Ave"},
]}

کار با JSON راحت است؛ اما از همه انواع داده موجود در BSON پشتیبانی نمی‌کند. بنابراین، برای تهیه نسخه پشتیبان و بازیابی، بهتر است از BSON دودویی استفاده نمایید.

 

چنانچه پایگاه داده‌ای که برای import کردن تعیین کرده‌اید، از قبل وجود نداشته باشد، به طور خودکار ایجاد می‌شود. این، حتی در ساختار collectionها (جداول پایگاه داده) نیز بهتر است. بر خلاف سایر موتورهای پایگاه داده، در MongoDB، ساختار دوباره به طور خودکار بر روی اولین داکیومنت (ردیف پایگاه داده) ایجاد می‌شود.

در MongoDB، خواندن یا افزودن مقدار زیادی از داده‌ها، مانند تسک‌های این مقاله، می‌تواند باعث مصرف منابع شود و مقدار زیادی از پردازنده، حافظه و فضای دیسک شما را مصرف کند. با توجه به اینکه MongoDB اغلب برای پایگاه داده‌های بزرگ و Big Data استفاده می‌شود، ساده‌ترین راه حل برای این مشکل، اجرای فرآیند export و backup در طول شب یا ساعات غیر اوج مصرف است.

اگر یک سرور MongoDB مشغول داشته باشید که در آن، اطلاعات هنگام فرآیند export یا backup پایگاه داده تغییر می‌کند، سازگاری اطلاعات می‌تواند مشکل‌ساز شود. یکی از راه‌حل‌های ممکن برای این مشکل همانندسازی است که ممکن است هنگام پیشبرد مبحث MongoDB آن را در نظر بگیرید.

در حالی که می‌توانید از توابع import و exoprt برای پشتیبان‌گیری و بازیابی اطلاعات خود استفاده نمایید، روش‌های بهتری برای اطمینان از یکپارچگی کامل پایگاه داده‌های MongoDB وجود دارد. بدین منظور، برای تهیه نسخه پشتیبان از اطلاعات خود می‌توان از دستور mongodump استفاده کرده و برای بازیابی، از mongorestore استفاده نمایید. در ادامه، نحوه استفاده از این دستورات شرح داده شده است.

 

این مطلب نیز ممکن است برای شما مفید باشد: نصب MongoDB برروی اوبونتو 20.04

 

مرحله 2 - استفاده از mongodump برای پشتیبان گیری از یک پایگاه داده MongoDB

یک آرگمان اساسی دستور mongodump، گزینه db-- است که نام پایگاه داده‌ای را که می‌خواهید از آن پشتیبان تهیه کنید، مشخص می‌نماید. چنانچه در دستور، نام پایگاه داده را مشخص نکنید، mongodump از همه پایگاه داده‌های شما پشتیبان تهیه می‌کند. دومین آرگمان مهم out-- است که داکیومنتی را تعریف می‌کند که داده‌ها در آن ریخته می‌شوند. به عنوان مثال، بیایید از پایگاه داده newdb نسخه پشتیبان تهیه کرده و آن را در دایرکتوری /var/backups/mongobackups ذخیره نماییم. در حالت ایده‌ال، هر یک از نسخه‌های پشتیبان خود را در یک دایرکتوری با تاریخ فعلی مانند /var/backups/mongobackups/10-29-20 خواهیم داشت.

ابتدا باید آن دایرکتوری /var/backups/mongobackups را ایجاد کنید:

sudo mkdir /var/backups/mongobackups

سپس mongodump را اجرا نمایید:

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 و حفظ اصطلاحاً fidelity (وفاداری) آن دارد.

به عنوان یک قاعده کلی، شما باید پشتیبان‌گیری منظمی را ترجیحاً در هنگام کم بودن بار سرور انجام دهید. بنابراین، می‌توانید دستور mongodump را به عنوان یک cron تنظیم نمایید تا به طور منظم (مثلاً هر روز در ساعت 03:03 صبح) اجرا شود.

بدین منظور ابتدا با استفاده از دستور زیر، crontab را باز کنید:

sudo crontab -e

توجه داشته باشید که هنگام اجرای sudo crontab، شما در واقع cron jobها را برای کاربر root انجام می‌دهید. انجام این کار توصیه می‌شود؛ زیرا اگر cronها را برای کاربر عادی خود تنظیم نمایید، ممکن است به درستی اجرا نشوند؛ خصوصاً اگر پروفایل sudo شما به تأیید رمز ورود نیاز داشته باشد.

سپس داخل crontab، دستور mongodump را به صورت زیر وارد کنید:

                 crontab

3 3 * * * mongodump --out /var/backups/mongobackups/`date +"%m-%d-%y"`

در دستور بالا، ما از آرگومان db-- استفاده نکرده‌ایم؛ زیرا معمولاً می‌خواهیم، از تمام پایگاه‌های داده خود پشتیبان تهیه کنیم.

 

بسته به اندازه پایگاه داده MongoDB شما، ممکن است با پشتیبان‌گیری بیش از حد، فضای دیسک شما تمام می‌شود. به همین دلیل توصیه می‌شود، پشتیبان‌های قدیمی را مرتباً تمیز یا فشرده نمایید.

به عنوان مثال، برای حذف همه نسخه‌های پشتیبان قدیمی‌تر از هفت روز، می‌توانید از دستور bash زیر استفاده کنید:

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

مشابه دستور mongodump قبلی، می‌توانید این مورد را نیز به صورت cron job اضافه نمایید. این cron job باید دقیقاً قبل از شروع پشتیبان‌گیری بعدی، مثلاً در ساعت 03:01 بامداد اجرا شود. برای این منظور، مجدداً با استفاده از دستور زیر، crontab را باز کنید:

sudo crontab -e

پس از آن، خط زیر را وارد نمایید:

                    crontab

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

تغییرات را ذخیره کرده و فایل را ببندید.

با انجام تمام تسک‌های این مرحله، یک راه حل پشتیبان گیری مناسب برای پایگاه‌های داده MongoDB شما تضمین می‌شود.

 

این مطلب نیز ممکن است برای شما مفید باشد: بارگیری و نصب MongoDB در ویندوز

 

مرحله 3 - استفاده از mongorestore برای بازیابی و انتقال پایگاه داده MongoDB

هنگامی‌که پایگاه داده MongoDB خود را از نسخه پشتیبان قبلی بازیابی می‌کنید، شما یک نسخه کپی دقیق از اطلاعات MongoDB خود در یک زمان خاص خواهید داشت که شامل تمام آن شاخص‌ها و انواع داده‌ها است. این امر به ویژه هنگامی‌که می‌خواهید پایگاه داده‌های MongoDB خود را انتقال دهید، بسیار مفید است. به منظور بازیابی MongoDB، ما از دستور mongorestore استفاده خواهیم کرد که با نسخه‌های پشتیبان باینری تولید شده توسط mongodump کار می‌کند.

بیایید مثال‌های خود را با پایگاه داده newdb ادامه دهیم و نحوه بازیابی آن از نسخه پشتیبان تهیه شده قبلی را مشاهده نماییم. بدین منظور، ابتدا نام پایگاه داده را با آرگومان db-- مشخص خواهیم کرد و از newdb.* برای بازیابی تمام collectionها استفاده خواهیم نمود. به منظور بازیابی تنها یک collection کافیست به جای newdb.*، از newdb.restaurant استفاده کنید.

با استفاده از آرگمان drop-- مطمئن خواهیم شد که پایگاه داده هدف در ابتدا حذف شده و سپس نسخه پشتیبان در یک پایگاه داده جدید بازیابی خواهد شد. به عنوان آرگومان نهایی، دایرکتوری آخرین نسخه پشتیبان را مشخص خواهیم کرد که مسیری مشابه /var/backups/mongobackups/10-29-20/newdb/ خواهد بود.

پس از اینکه نسخه پشتیبان شما به همراه یک برچسب زمان ایجاد شد، شما می‌توانید با استفاده از دستور زیر، آن را بازیابی کنید:

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/backupsmongobackups/10-29-20/newdb/) را در سرور دیگر کپی کنید.

 

 

 

منبع:

digitalocean