目录

简介

先决条件

要求

使用的组件

查看日志数据

如果数据库未启动，则修复该数据库

简介

本文档介绍如何在非干净关闭后修复安全网络分析（以前称为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