從刪庫到跑路,再到修庫(修復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臺是今天突然下線的,修的時候最後一臺自己就好了?!
一些有的沒的,想起來再補充>>>...