目錄

簡介

必要條件

需求

採用元件

檢視日誌資料

如果資料庫未啟動，則修復該資料庫

簡介

本文說明如何在非乾淨關閉後在Secure Network Analytics（前身為Stealthwatch）Manager裝置上修復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:/#

步驟2.停止Mongo服務

如果發現lc-mongodb服務處於active狀態，請使用/bin/systemtl 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 狀態。

步驟3.收集進程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:/#

步驟4.檢查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:/#

步驟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

嘗試使用/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