گفتم حالا که دارم درباره ی بک آپ گرفتن مطالعه میکنم، چیزایی که یاد میگیرم رو اینجا هم منتشر کنم :) من علیرضام و این اول پست آموزشی من به حساب میاد و امیدوارم مفید هم باشه براتون.
روش های مختلفی برای بک آپ گرفتن از دیتابیس هاتون وجود دارد که به طور کلی به دو شاخه ی Logical و Physical تقسیم میشن. تو روش Logical خود دیتابیس یکسری API به ما میده که که به صورت خودکار دیتاها رو میخونه و برمیگردونه که معمولا تو فایل هایی با پسوند json, bson یا csv ذخیره میکنه. همونطور که معلومه اگه از حجم زیادی از دیتا میخواییم بک آپ تهیه کنیم این روش زیاد کارآمد نیست و فشار زیادی رو تحمیل میکنه که در این صورت باید به روش دوم پناه ببریم. من تو این پست فعلا کاری بهش ندارم :) اما در روش Physical که بهش Filesystem backup هم میگن یک کپی یا snapshot از فایل های دیتابیس به کمک یکسری ابزار میگیریم.
درضمن تو این مقاله من از MongoDB ورژن 6.0.3 استفاده کردم. بریم ببینیم چه خبره!
ابزاری که تو روش Logical برای بک آپ استفاده میشه Mongodump هست که اگه نصب ندارین میتونین از این لینک دانلود کنین. این ابزار خودش به دیتابیس وصل میشه و دیتاهارو میخونه و درنهایت یکجا ذخیره میکنه که بعدا دوستش Mongorestore (بعدا میفهمیم چی هست) در صورت نیاز بتونه فایل های بک آپ رو بخونه و restore کنه.
مثل خیلی از ابزار های دیگه، Mongodbump هم یکسری سوئیچ داره که من مهم هاش رو براتون اوردم:
پیشنهاد: بهترین کار اینه که خودتون هم داکیومنتش رو از این لینک بخونین :)
نکته: حتما حواستون باشه که بک آپ هاتون کجا و با چه اسمی ذخیره میشن، اگه همنام باشن درنهایت overwrite خواهند شد.
بیاید با یه دستور ساده شروع کنیم.
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. رو هم حتما به اخر اسم اضافه کنید.
برای اینکه از بک آپ هامون استفاده کنیم و دیتاهامون رو اصطلاحا restore کنیم، از یک ابزار دیگه به اسم Mongorestore استفاده میکنیم که میتونین از این لینک دانلود کنین.
نکته: دقت کنین که اگه دیتابیسی که ازش بک آپ تهیه کردین ورژنش 4.0 هست، دیتابیسی که قراره روش دیتاها رو restore کنین هم باید ورژنش 4.0 باشه. و همچنین اگه از یک Mongodump با 100.7.0 بکاپ تهیه شده، ورزژن Mongorestore هم باید 100.7.0 باشه.
مثل همیشه اول با یک مثال ساده شروع میکنیم.
mongorestore -v --uri="mongodb://localhost:27017/" --dir="./backup" --nsFrom="test.*" --nsTo="restore.*"
با سویچ های v- و uri-- آشنا شدیم. اما بیاید سویچ های جدید رو یک بررسی کوچیک بکنیم:
نکته: توجه کنین که اگه دیتابیس مقصدتون وجود نداشته باشه، خودش یکی میسازه و اگه وجود داشته باشه هم سعی میکنه تو همون دیتابیس دیتاها رو 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 کردن میکنه.
امیدوارم مفید بوده باشه براتون :) من فقط سعی کردم یک مقدمه ای براتون گفته باشم که برای شروع کمک کننده باشه.