1. 程式人生 > >從刪庫到跑路,再到修庫(修復mongodb下線和解除安裝重灌的問題)

從刪庫到跑路,再到修庫(修復mongodb下線和解除安裝重灌的問題)

2018年8月8號晚上,開始了我們大一在實驗室第一個真正的專案。開始連叢集機器,不小心連錯一臺存著以前爬取的資料的機器,上手就是一頓操作,怎麼說呢,應了那句話,常在水便走哪有不溼鞋,淹死會水的,學長說自己建個數據庫,我尋思確實,沒有庫和環境怎麼跑程式,先搞庫吧。一頓操作,發現這個機器上的mongodb不能正常使用,平時玩linux,萬事重灌+重啟。當時想都沒想dpkg -l mongodb 然後y加回車。當時我瞥到回顯您是否刪除xxxxxxmb (具體多大我記不住了),我靠,我慌逼了。然後就有了修庫之路。

工具:xshell

首先xshell連機器

 

 連線成功後需要做的事

1. 提權,沒有root許可權幹啥都不方便(刪庫也是,我初步打算給實驗室叢集做一個許可權控制系統,不太容易,慢慢研究)

命令[sudo su]

2.  看一下mongodb相關檔案都在什麼位置

命令[locate mongodb]

# 這裡有必要說一下mongodb的服務程序:

1). service mongodb 是mongodb的服務(就像apache的web服務一樣)必須處於running狀態才能使用mongodb資料庫

2). mongod 是服務程序,應該放在後臺執行,只有它正確執行時,mongodb資料庫才可以接受其他主機或者本機的程序發起的連線請求

3). mongo 是本地資料庫操作程序,可以用於直接操作本機資料庫,一般只有在安裝mongodb測試時才會用到。今天主要講mongodb修庫,就不多說了,網上部署mongodb的教程很多,可自行搜尋。

# 再說一下mongodb的檔案系統:

當你執行上面的命令時就可以看到mongodb的檔案系統主要是兩塊

一是,資料存放位置,本機為 /var/lib/mongodb

二是,軟體安裝位置的檔案系統

3. 進入資料庫儲存位置 & 檢視目錄檔案

命令[cd /var/lib/mongodb] & [ls]

mongo.lock 檔案是mongodb資料庫異常關閉時,自動在資料庫位置生成的鎖檔案,當該檔案存在時,是無法啟動mongod的,切記。

4. 這裡刪除mongod.lock檔案

命令[rm mongod.lock]

再次ls 檢視一下是否刪除,

其實mongodb應該可以設定不加mongod.lock鎖的,但是我覺得既然人家設定了這個東西就還是保留的好,畢竟做mongodb的人才是專業大佬,不是我懶不想找哦。

5. 檢視一下mongodb的狀態是否為running

命令[service mongodb status]

 如果是關閉的狀態那就需要啟動

開啟:[service mongodb start]

關閉:[service mongodb stop]

重啟:[service mongodb restart]

6. 開啟mongod服務

命令[mongod]

可以看到mongod開啟失敗,報錯如圖 ,這裡是個坑

錯誤提示:未找到/data/db路徑

這是正常的,因為這是預設的啟動方法,這種方法是認為/data/db是他的資料庫位置,但是這和我們的實際情況不一樣

#這裡要講一下mongod的兩種啟動方式:

1).命令啟動:這種啟動方法就是使用預設的啟動配置,當然也可以制定某些配置來啟動,其他的預設就按預設來。如下我們需要的是修改埠和庫路徑,命令:[mongod --dbpath /var/lib/mongodb --port XXXXX]

ps:--fork:以守護程序的方式執行MongoDB,建立服務程序,相當於nohup ... &

我自己搞得時候傻了吧唧的只用了nohup,你們可以用--fork

2).配置檔案啟動:本機ubuntu系統中配置檔案路徑在剛才locate mongodb的時候已經看到了,就是/etc/mongodb.conf

啟動命令:[mongod -f /etc/mongodb.conf]

ps:我們可以使用vim 編輯它,後臺執行配置檔案修改需要 fork=true 

 dbpath = 庫路徑

 bind_ip = 繫結ip,一般是0.0.0.0(表示預設,任何一個IP地址都可以訪問到)

 port = 埠(預設是27017)

7. 開啟mongod可能遇到的問題,如果成功開啟請跳過:

首先我們看到正在恢復資料,這就是個好兆頭,可是它可不會這麼輕易的讓你搞定,他得我跟你玩會兒。庫

馬上就跳出來了個error:

 我們看到提示資訊該地址已經被使用,就是說,該埠已經被佔用,我估計是以前叢集上跑程式的時候,有程序佔用,它們用的是這個埠,當我把啟動埠改掉就可以正常啟動了,但是我們需要使用那個埠,我只能說,庫。

需要注意的是當我們啟動失敗時,在資料庫資料夾下可能又加上了lock檔案,所以下次啟動前記得 rm 它

1). 檢視埠程序
命令:[netstat -nap | more]

可以看到112主機的2499號程序是mongod的我們需要kill它們

命令[kill 2499]

再檢視一次確定一下。

有時候也需要使用ps列出系統程序,kill mongod的程序,方法一樣 [kill + 程序PID]

2.)刪掉lock檔案,再嘗試開啟mongod服務

這次應該可以正常啟動了。使用robo 3t連線一下資料庫,埠號要對應,關掉xshell的會話再次連線,確認程式能在後臺正常執行。

到這裡要是還不行,那就是機器跟你過不去了,別刪庫了,拆機器跑路吧

8. 再說一下開機自啟的方法

因為過年要關叢集讓它們集體放假,所以這裡設定一下讓服務開機自啟。

whereis rc.local找了一下,發現有一個/etc/rc.local

它的內容應該是:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exit 0

命令:[vi /etc/rc.local]

vim的使用就不多講了,只需要再英文狀態按 [i] 然後 輸入命令,然後 [ESC] 然後 [:wq] 回車

將命令寫入時,注意要放於exit 0之前

我這裡寫的是這樣的,我也不知道能不能行。如果您是大佬請指正我,謝謝。


 

 9. 到這裡修庫之路圓滿結束,歷時3天。

這批修復了4臺機器,一臺是被我解除安裝的,另外2臺是今天突然下線的,修的時候最後一臺自己就好了?!

一些有的沒的,想起來再補充>>>...