المقدمة
يوضح هذا المستند كيفية إصلاح MongoDB على جهاز Secure Network Analytics (المعروف سابقا باسم Stealthwatch) Manager بعد إيقاف تشغيل غير صالح.
المتطلبات الأساسية
المتطلبات
لا توجد متطلبات خاصة لهذا المستند.
المكونات المستخدمة
لا يقتصر هذا المستند على إصدارات برامج ومكونات مادية معينة.
تم إنشاء المعلومات الواردة في هذا المستند من الأجهزة الموجودة في بيئة معملية خاصة. بدأت جميع الأجهزة المُستخدمة في هذا المستند بتكوين ممسوح (افتراضي). إذا كانت شبكتك مباشرة، فتأكد من فهمك للتأثير المحتمل لأي أمر.
مراجعة بيانات السجل
أستخدم الأمر أقل
لمراجعة ملف mongodb.log.
732smc:~# less /lancope/var/mongodb/log/mongodb.log
2021-06-21T14:54:43.029+0000 I CONTROL ***** SERVER RESTARTED *****
2021-06-21T14:54:43.033+0000 I CONTROL [initandlisten] MongoDB starting : pid=87057 port=27017 dbpath=/lancope/var/database/dbs/mdb/ 64-bit host=ussecrapstwsmc1
2021-06-21T14:54:43.033+0000 I CONTROL [initandlisten] db version v3.0.15
2021-06-21T14:54:43.033+0000 I CONTROL [initandlisten] git version: b8ff507269c382bc100fc52f75f48d54cd42ec3b
2021-06-21T14:54:43.033+0000 I CONTROL [initandlisten] build info: Linux 3555b2234f08 4.9.0-2-amd64 #1 SMP Debian 4.9.13-1 (2017-02-27) x86_64 BOOST_LIB_VERSION=1_49
2021-06-21T14:54:43.033+0000 I CONTROL [initandlisten] allocator: tcmalloc
2021-06-21T14:54:43.033+0000 I CONTROL [initandlisten] options: { config: "/etc/mongodb/mongodb.conf", net: { port: 27017 }, processManagement: { fork: true }, storage: { dbPath: "/lancope/var/database/dbs/mdb/" }, systemLog: { destination: "file", logAppend: true, path: "/lancope/var/mongodb/log/mongodb.log" } }
2021-06-21T14:54:43.050+0000 W - [initandlisten] Detected unclean shutdown - /lancope/var/database/dbs/mdb/mongod.lock is not empty.
2021-06-21T14:54:43.063+0000 I STORAGE [initandlisten] **************
old lock file: /lancope/var/database/dbs/mdb/mongod.lock. probably means unclean shutdown,
but there are no journal files to recover.
this is likely human error or filesystem corruption.
please make sure that your journal directory is mounted.
found 2 dbs.
see: http://dochub.mongodb.org/core/repair for more information
*************
2021-06-21T14:54:43.063+0000 I STORAGE [initandlisten] exception in initAndListen: 12596 old lock file, terminating
2021-06-21T14:54:43.063+0000 I CONTROL [initandlisten] dbexit: rc: 100
إصلاح قاعدة البيانات إذا لم تبدأ
الخطوة 1. التحقق من حالة مونغو
للتحقق من حالة lc-mongodb.service، قم بإصدار الأمر systemCTL نشط lc-mongodb
.
إذا كان مونجو في حالة نشطة، فإن النتائج سوف تتشابه:
732smc:/# systemctl is-active lc-mongodb
active
732smc:/#
وإذا لم يكن مونجو في حالة نشطة، فإن النتائج سوف تتشابه:
732smc:/# systemctl is-active lc-mongodb
inactive
732smc:/#
الخطوة 2. أوقفوا خدمة مونغو
إذا تم العثور على خدمة LC-MONGODB في حالة نشطة
، فقم بإيقاف الخدمة باستخدام الأمر /bin/systemCTL stop lc-mongodb.service
.
732smc:/# /bin/systemctl stop lc-mongodb.service
732smc:/# /bin/systemctl status lc-mongodb.service | grep Active
Active: inactive (dead) since Thu 2022-04-07 12:33:49 UTC; 1s ago7
انتظر بضع دقائق وتأكد من أن المونجو لا يزال في حالة توقف. أستخدم الأمر /bin/systemCTL status lc-mongodb.service
حسب الحاجة لضمان أن الخدمة في حالة غير نشطة
.
الخطوة 3. معرف عملية التجميع (PID)
تحقق لمعرفة ما إذا كان ملف التأمين لا يزال يحتوي على PID. قم بإصدار الأمر cat /lancope/var/database/dbs/mdb/mongod.lock
.
يوضح هذا الإخراج أن ملف التأمين يحتوي على معرف العملية الخاص بخدمة أحادية. يجب أن يحتوي هذا الملف على بيانات فقط إذا كانت الخدمة في حالة نشطة.
ملاحظة: لاحظ معرف العملية إذا تم إرجاع واحد، كما هو مستخدم في الخطوة 4
732smc:/# cat /lancope/var/database/dbs/mdb/mongod.lock
14259
732smc:/#
يوضح هذا الإخراج أن ملف التأمين لا يحتوي على معرف PID. يجب أن يكون هذا الملف فارغا إذا لم تكن العملية في حالة نشطة. إذا لم يكن هناك PID استمر في الخطوة 7.
732smc:/# cat /lancope/var/database/dbs/mdb/mongod.lock
732smc:/#
الخطوة 4. التحقق من حالة PID
إذا كان الملف MONGOD.Lock المحدد في الخطوة 3 يحتوي على PID، فقم بتشغيل صمام PS
| grep [1]
4259 أمر (قم بتغيير [1]4259 مع PID الخاص بك من الخطوة 3) للتحقق من وجود PID ثم قم بعد ذلك بقتل PID إذا تم العثور عليه.
ملاحظة: تعبير القوس غير مطلوب ولكنه ينتج عنه إستبعاد الأمر "grep" في الإخراج.
732smc:/# ps faux | grep [1]4259
mongodb 14259 0.3 0.4 516180 71520 ? Sl 12:38 0:03 /lancope/mongodb/bin/mongod --fork --config /etc/mongodb/mongodb.conf
732smc:/# kill -9 14259
732smc:/#
الخطوة 5. مسح محتويات ملف التأمين
امسح محتوى ملف القفل باستخدام الأمر > /lancope/var/database/dbs/mdb/mongod.lock
. تحقق من أن الملف فارغ الآن باستخدام الأمر cat /lancope/var/database/dbs/mdb/mongo.lock
.
732smc:/# > /lancope/var/database/dbs/mdb/mongod.lock
732smc:/# cat /lancope/var/database/dbs/mdb/mongod.lock
732smc:/#
الخطوة 6. محاولة بدء تشغيل MongoDB
حاول بدء خدمة LC-MONGODB باستخدام الأمر /bin/systemCTL start lc-mongodb.service
. بمجرد إرجاع المطالبة الخاصة بك، تحقق من حالة العملية باستخدام حالة/bin/systemCTL lc-mongodb.service
| GREP نشط
أمر.
732smc:/# /bin/systemctl start lc-mongodb.service
732smc:/# /bin/systemctl status lc-mongodb.service | grep Active
Active: active (running) since Thu 2022-04-07 12:38:37 UTC; 27s ago
732smc:/#
إذا كانت العملية في حالة نشطة، فتحقق مرة أخرى في غضون دقائق قليلة لضمان بقائها في حالة نشطة. لا تحتاج إلى إصلاح قاعدة البيانات إذا ظلت في حالة عمل. إذا فشلت العملية في البقاء نشطة، انتقل إلى الخطوة 7 وابدأ عملية إصلاح.
الخطوة 7. بدء الإصلاح
قم بإصدار الأمر -u mongodb /lancope/mongodb/bin/mongod —dbpath /lancope/var/database/dbs/mdb —
أمر الإصلاح
732smc:/# sudo -u mongodb /lancope/mongodb/bin/mongod --dbpath /lancope/var/database/dbs/mdb/ --repair
732smc:/#
الخطوة 8. محاولة بدء تشغيل MongoDB الذي تم إصلاحه
قم بتشغيل الأمر /bin/systemCTL start lc-mongodb.service
لبدء تشغيل الخدمة. يجب أن تظل العملية في حالة نشطة ويمكن فحصها باستخدام الأمر /bin/systemctl status lc-mongodb.service
.
732smc:/# /bin/systemctl start lc-mongodb.service
732smc:/# /bin/systemctl status lc-mongodb.service | grep Active
Active: active (running) since Thu 2022-04-07 12:38:37 UTC; 27s ago