简介
本文档介绍如何在非干净关闭后修复安全网络分析(以前称为Stealthwatch)管理器设备上的MongoDB。
先决条件
要求
本文档没有任何特定的要求。
使用的组件
本文档不限于特定的软件和硬件版本。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解任何命令的潜在影响。”
查看日志数据
使用less
命令查看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 is-active lc-mongodb
命令。
如果Mongo处于活动状态,则结果将类似于:
732smc:/# systemctl is-active lc-mongodb
active
732smc:/#
如果Mongo未处于活动状态,则结果将类似于:
732smc:/# systemctl is-active lc-mongodb
inactive
732smc:/#
第二步:停止Mongo服务
如果发现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
命令以确保服务处于inactive
状态。
第三步:收集进程ID(PID)
检查锁定文件是否仍包含PID。发出cat /lancope/var/database/dbs/mdb/mongod.lock
命令。
此输出显示锁定文件包含mongo服务的PID。此文件必须仅包含服务处于活动状态的数据。
注:如果返回了PID,请注意该值,如步骤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:/#
第四步:检查PID状态
如果第3步中检查的mongod.lock文件包含一个PID,请运行ps fuax
| grep [1]4259命
令(使用步骤3中的PID更改[1]4259)以检查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:/#
第五步:清除锁定文件内容
使用> /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:/#
第六步:尝试启动MongoDB
尝试使用/bin
/systemctl start lc-mongodb.service命令启动lc-mongodb服
务。返回提示符后,使用/bin/systemctl status lc-mongodb.service检查进程的状态
| grep Active命
令。
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.启动修复
发出sudo -u mongodb /lancope/mongodb/bin/mongod —dbpath /lancope/var/database/dbs/mdb —repair命
令
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