簡介
本文說明如何在非乾淨關閉後在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/system
tl 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