redis 官方沒有 Windows 版的,微軟維護的已經好久沒更新了,所以就在想着換成 MongoDB。
於是一趟被我復雜化的踩坑之旅就開始了,同時也記錄一下,避免有人遇見跟我一樣的問題。
首先在 官網 上下載 msi 安裝包開始安裝。
我不喜歡把軟件裝在系統盤,所以我選擇 Custom,自己選要裝在哪里,然后就跳出來下面這張圖。針對下面這張圖我翻譯一下官方文檔上的內容作為解釋。
從 MongoDB 4.0 開始,默認情況下,你可以在安裝期間配置和啟動 MongoDB 作為服務,並在成功安裝后啟動 MongoDB 服務。也就是說,MongoDB 4.0 已經不需要像以前版本那樣輸入一堆命令行來將 MongoDB 配置成 Windows 服務來自動運行了,方便了很多。
- 如果你選擇不將 MongoDB 配置為服務,請取消選中
Install MongoD as a Service
。 -
如果你選擇將 MongoDB 配置為服務,則可以:
-
指定以下列用戶之一運行服務:
- 網絡服務用戶;即 Windows 內置的 Windows 用戶帳戶
- 本地或域用戶:
- 對於現有本地用戶帳戶,
Account Domain
指定為.
,並為該用戶指定Account Name
和Account Password
。 - 對於現有域用戶,請為該用戶指定
Account Domain
,Account Name
和Account Password
。
- 對於現有本地用戶帳戶,
-
指定
Service Name
。如果你已擁有具有指定名稱的服務,則必須選擇其他名稱。 - 指定
Data Directory
(數據保存目錄),對應於--dbpath
。如果該目錄不存在,安裝程序將創建該目錄並為服務用戶設置訪問權限。 - 指定
Log Directory
(日志保存目錄),該目錄對應於--logpath
。如果該目錄不存在,安裝程序將創建該目錄並為服務用戶設置訪問權限。
-
然后到了這一步,不要勾選 Install MongoDB Compass
。
然后,就出問題了。看他的提示說的是 MongoDB Server
服務無法啟動,確保你有足夠的權限啟動系統服務。
???沒有權限嗎,右鍵屬性安裝包發現沒辦法使用管理員啟動。於是我就跟着這個線索去找資料了。
有說使用管理員啟動命令提示符,然后進行安裝的,我試了下,沒用。然后我根據官網上的無人值守安裝教程來做,發現連最基本的文件都解壓不完全。【怒摔
沒有辦法在安裝時候解決這個問題,那么只有先忽略了。
然后根據官網上的教程來手動啟動服務試一下,在 MongoDB 安裝文件夾的 bin 文件夾下,使用管理員權限打開 PowerShell:
然后輸入:
.\mongod --dbpath="E:\MongoDB\data"
- 1
從返回的命令來看沒問題,最后一條是等待端口 27017 上的連接,所以我在瀏覽器中輸入了 127.0.0.1:27017
:
可以訪問,沒毛病啊。
所以服務為什么不能啟動呢?
我嘗試使用 net start MongoDB
命令來啟動,失敗:
繼續深挖,在任務管理器的服務里面找到 MongoDB,發現狀態是 已停止
,右鍵開始,提示 服務沒有及時響應啟動或控制請求
。
再來,在任務管理器下方 打開服務
,找到 MongoDB Server,查看它的屬性,看看有什么貓膩。
這里可以看到可執行文件的路徑是這樣的:E:\MongoDB\bin\mongod.exe --config "E:\MongoDB\bin\mongod.cfg" --service
。
也就是說,啟動 MongoDB Server 服務時運行的也是這條命令,於是我手動運行了這條命令:
Unrecognized option: mp
,未識別的選項:mp,這是個啥?
mongod 命令后的 --config
是指定運行 mongod 時的配置文件,於是在 bin 文件夾下找到 mongod.cfg
文件,打開:
# mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # Where and how to store data. storage: dbPath: E:\MongoDB\data journal: enabled: true # engine: # mmapv1: # wiredTiger: # where to write logging data. systemLog: destination: file logAppend: true path: E:\MongoDB\log\mongod.log # network interfaces net: port: 27017 bindIp: 127.0.0.1 #processManagement: #security: #operationProfiling: #replication: #sharding: ## Enterprise-Only Options: #auditLog: #snmp: mp:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
終於發現隱藏在最后一行的 mp:
,找得我好苦,然后又在配置文件中列出的網址中翻了一圈,沒有發現有 mp:
這個選項。在解決問題時我曾經試着在 C 盤上安裝 MongoDB,一切順利,沒有任何報錯,所以我對比了一下安裝在兩個盤上的配置文件,發現差別就只是最后的這個 mp:
。
當我把最后一行的 mp:
刪掉后,重新啟動服務,成功了!!!
將 bin 文件夾設置進系統環境變量可以大大方便在命令提示符中使用 mongo 等命令,這里就不細說了。
我也不知道為什么安裝在非系統盤上時,mongod.cfg
文件會無故多出來這么令人抓狂的一行,我看其他教程都沒有提到這個問題,也許只有我電腦會出現這種情況。中途我還很復雜地將 Network Service 用戶添加到了 User 組里,雖然不知道為什么這也解決了問題,但是后面發現原來只需要刪掉一行就行了。
所以解決問題中走了很多彎路,踩了很多坑,不過也收獲了很多。如果有誰能解釋這個現象,歡迎指教~
如果是使用 msi 進行安裝,由於 MongoDB 4.0 自動安裝配置成 Windows 服務,也就不需要大部分教程里的像 mongod --dbpath "C:\MongoDB\data\db" --logpath "C:\MongoDB\data\log\mongo.log" --install --serviceName "MongoDB"
這樣的語句了,除非下載的是單純的壓縮包,我看到很多 4.0 的教程下載的是 msi 安裝包,都還在使用命令提示符配置 MongoDB 成服務,所以這不是多此一舉嗎?
MongoDB Server 啟動時會調用 mongod.cfg 配置文件,所以要調整配置,直接按照官方文檔里的說明修改該文件就行。log 文件會記錄很多有用的信息,如果使用 mongod 或 mongo 有地方報錯了或者想知道更詳細的信息可以查看日志。
比如說你已經使用 msi 安裝好了,然后又使用上面那條語句,在命令提示符里只有這樣的提示:
但是打開日志文件就會發現:
已經安裝過 MongoDB 服務了,所以上面那句相當於沒用了。
勤思考,不隨波逐流,多看官方文檔,技術才能進步。
net start MongoDB報錯:發生服務特定錯誤: 100.
有人說,先刪除服務,在建服務,試了,對我沒用。
簡單點,直接進入db文件夾,先刪除 mongod.lock 文件,然后重新啟動服務即可;
要是還不行,就繼續刪 storage.bson文件,然后問題就解決了~