علیرضا
علیرضا
خواندن ۵ دقیقه·۱ سال پیش

MongoDB backup tutorial (Basic)

گفتم حالا که دارم درباره ی بک آپ گرفتن مطالعه میکنم، چیزایی که یاد میگیرم رو اینجا هم منتشر کنم :) من علیرضام و این اول پست آموزشی من به حساب میاد و امیدوارم مفید هم باشه براتون.

Intro

روش های مختلفی برای بک آپ گرفتن از دیتابیس هاتون وجود دارد که به طور کلی به دو شاخه ی Logical و Physical تقسیم میشن. تو روش Logical خود دیتابیس یکسری API به ما میده که که به صورت خودکار دیتاها رو میخونه و برمیگردونه که معمولا تو فایل هایی با پسوند json, bson یا csv ذخیره میکنه. همونطور که معلومه اگه از حجم زیادی از دیتا میخواییم بک آپ تهیه کنیم این روش زیاد کارآمد نیست و فشار زیادی رو تحمیل میکنه که در این صورت باید به روش دوم پناه ببریم. من تو این پست فعلا کاری بهش ندارم :) اما در روش Physical که بهش Filesystem backup هم میگن یک کپی یا snapshot از فایل های دیتابیس به کمک یکسری ابزار میگیریم.

درضمن تو این مقاله من از MongoDB ورژن 6.0.3 استفاده کردم. بریم ببینیم چه خبره!

Mongodump

ابزاری که تو روش Logical برای بک آپ استفاده میشه Mongodump هست که اگه نصب ندارین میتونین از این لینک دانلود کنین. این ابزار خودش به دیتابیس وصل میشه و دیتاهارو میخونه و درنهایت یکجا ذخیره میکنه که بعدا دوستش Mongorestore (بعدا میفهمیم چی هست) در صورت نیاز بتونه فایل های بک آپ رو بخونه و restore کنه.

Options

مثل خیلی از ابزار های دیگه، Mongodbump هم یکسری سوئیچ داره که من مهم هاش رو براتون اوردم:

  • برای بحث connect شدن به دیتابیس ار سوئیچ uri– استفاده میکنیم.
  • برای اینکه تو خروجی جزئی تر بنویسه که داره چیکار میکنه از سوئیچ v- استفاده کنیم. (اصطلاحا پرحرف بشه)
  • برای اینکه تعیین کنین از چه دیتابیسی میخوایین بک آپ بگیرین یا باید تو uri مشخص کنین یا از سوئیچ db– استفاده کنین. ( اگه معلوم نکنین بطور خودکار از کل دیتابیس ها بک آپ گرفته میشه)
  • با سوئیچ c- میتونین مشخص کنین از کدوم کالکشن خاص میخوایین بک آپ بگیرین. (اگه مثل بالا مشخص نکنین بطور خودکار از همه ی کالکشن ها بک آپ گرفته میشه)
  • با سوئیچ out– مشخص میکنین فایل های بک آپ تو چه دایرکتوری ذخیره بشن.
  • با سوئیچ archive– میتونین خروجی رو بصورت یک فایل از نوع آرشیو ذخیره کنین. (سوئیچ های out– و archive– نمیتونین همزمان با هم استفاده بشن)
  • برای اینکه خروجی زیپ بشه از سوئیچ gzip– استفاده کنین.

پیشنهاد: بهترین کار اینه که خودتون هم داکیومنتش رو از این لینک بخونین :)

نکته: حتما حواستون باشه که بک آپ هاتون کجا و با چه اسمی ذخیره میشن، اگه همنام باشن درنهایت overwrite خواهند شد.

Let's backup!

بیاید با یه دستور ساده شروع کنیم.

mongodump -v --uri="mongodb://localhost:27017/test" --out="./backup"

با این دستور خیلی ساده از دیتابیس test ( که تو uri مشخص کردم ) یک بک آپ تهیه کردم که تو دایرکتوری فعلیمون ذخیره خواهد شد.

برای اینکه خروجیه بک آپ تو یک فایل از نوع آرشیو ذخیره شه از دستور زیر استفاده میکنیم.

mongodump -v --uri="mongodb://localhost:27017/test" --archive="./test.archive"

با اجرای این دستور یک فایل آرشیو تو دایرکتوریه فعلیمون با اسم test.archive ذخیره خواهد شد.

نکته: اگه تو هر دوتا مورد بالا از سوئیچ gzip-- استفاده کنین، فایل های بک آپ فشرده هم خواهند شد. مثلا بیاید بیاید یک بک آپ از دیتابیس test بگیریم و خروجی رو بصورت یک فایل آرشیو که فشرده شده باشه ذخیره کنیم.

mongodump -v --gzip --uri="mongodb://localhost:27017/test" --archive="./test.archive.gz"

این مثال رو زدم چون یک نکته ی کوچیک داره و اونم اینه که باید پسوند gz. رو هم حتما به اخر اسم اضافه کنید.

Mongorestore

برای اینکه از بک آپ هامون استفاده کنیم و دیتاهامون رو اصطلاحا restore کنیم، از یک ابزار دیگه به اسم Mongorestore استفاده میکنیم که میتونین از این لینک دانلود کنین.

نکته: دقت کنین که اگه دیتابیسی که ازش بک آپ تهیه کردین ورژنش 4.0 هست، دیتابیسی که قراره روش دیتاها رو restore کنین هم باید ورژنش 4.0 باشه. و همچنین اگه از یک Mongodump با 100.7.0 بکاپ تهیه شده، ورزژن Mongorestore هم باید 100.7.0 باشه.

Let's restore the backups!

مثل همیشه اول با یک مثال ساده شروع میکنیم.

mongorestore -v --uri="mongodb://localhost:27017/" --dir="./backup" --nsFrom="test.*" --nsTo="restore.*"

با سویچ های v- و uri-- آشنا شدیم. اما بیاید سویچ های جدید رو یک بررسی کوچیک بکنیم:

  • سویچ dir-- به دایرکتوریی که بک آپ ها ذخیره شدن اشاره داره.
  • سویچ nsFrom-- به دیتابیس و کالکشنی که میخوایین دیتاهاش رو restore کنین اشاره داره. تو مثال بالا گفتم از دیتابیس test همه ی کالکشن هاش رو میخواییم restore کنیم.
  • سویچ nsTo-- به دیتابیس و کالکشن مقصدمون اشاره داره. تو مثال بالا گفتیم دیتاها رو به دیتابیس restore منتقل کن.

نکته: توجه کنین که اگه دیتابیس مقصدتون وجود نداشته باشه، خودش یکی میسازه و اگه وجود داشته باشه هم سعی میکنه تو همون دیتابیس دیتاها رو restore میکنه.

حالا فرض میکنیم فایل بک آپ، یک فایل از نوع آرشیو هست.

mongorestore -v --uri="mongodb://localhost:27017/" --archive="./test.archive" --nsFrom="test.*" --nsTo="restore.*"

همونطور که میبینیم همه مراحل مثل بالا هست فقط به جای dir-- از سویچ archive-- استفاده کردیم چون فایل بک آپ یک فایل از نوع آرشیو هست.

امیدوارم گیج نشده باشین :) ولی مثل همیشه پیشنهاد میکنم خودتون داکیومنتش رو حتما یه نگاه بندازین.

حالا بیاید یک فایل بک آپ از نوع آرشیو که فشرده هم شده رو restore کنیم.

mongorestore -v --gzip --uri="mongodb://localhost:27017/" --archive="./test.archive.gz" --nsFrom="test.*" --nsTo="restore.*"

میبینید که چون فایل بک آپ یک فایل آرشیو و فشرده شدس، از سوئیچ gzip-- استفاده کردیم.

یه سویچ دیگه هم هست که میتونه خطرناک باشه پس حتما دقت کنین چون ممکنه گرون تموم شه براتون :) با سویچ drop-- اگه دیتابیسی همنام با دیتابیس مقصدتون وجود داشته باشه، اول اونو پاک کنه و بعد شروع به restore کردن میکنه.

امیدوارم مفید بوده باشه براتون :) من فقط سعی کردم یک مقدمه ای براتون گفته باشم که برای شروع کمک کننده باشه.

References

Mongodump

Mongorestore

MongoDB Database Backup

بک آپمونگو دی بیbackupmongodb
سعی میکنم هرچیز مفیدی که بلدم رو به بقیه هم یاد بدم :)
شاید از این پست‌ها خوشتان بیاید