- 使用環境:
macOS
- MongoDB 版本:不拘
我們要啟動 MongoDB 只需要使用 mongod
指令即可,但實務上總不可能只有這樣,尤其是要搭上 CI/CD、容器化等自動部署,因此本文先來講解如何使用 .conf
檔案來設定資料庫。
首先要知道的是 MongoDB 預設的資料庫路徑是 /data/db/
,如果直接在 macOS 底下啟動,只會遇到這樣的錯誤:
1 | ➜ MingYi mongod |
可以看到 Exception: exception in initAndListen: NonExistentPath: Data directory /data/db not found.
,嗯..資料夾不存在,於是我們嘗試著建立 /data/db/
資料夾:
1 | ➜ / pwd |
會發現無法建立,這是因為 macOS 的安全機制緣故。我們在這邊不打算跟它硬碰硬,山不轉路轉,我們改成指定 MongoDB 的資料庫位置,使用的是 dbpath
設定:
ex: mongod --dbpath=/Users/mingyi/Documents/MingYi/data/db/
透過上述指令就能夠成功啟動 MongoDB server 囉!
port
1 | 2022-10-07T22:38:30.097+0800 I CONTROL [initandlisten] ** WARNING: This server is bound to localhost. |
我們可以從 terminal 看到開啟的訊息,裡面包含了綁定的 localhost
與 27017
,通常只有在本機端開發才會使用這組,接著我們來嘗試著設定 Port。
- 使用的參數
--host
mongod --host=27066 --dbpath=/Users/mingyi/Documents/MingYi/data/db/
接著預期就能看到這樣的訊息了 waiting for connections on port 27066
logpath
在 Terminal 看到的訊息也可以儲存到指定檔案
- 使用的參數
--logpath
mongod --dbpath=/Users/mingyi/Documents/MingYi/data/db/ --logpath=/Users/mingyi/Documents/MingYi/mongo.log
fork
--fork
參數則是離開互動模式,使用後就可以繼續使用同一個 terminal,不需要再額外開一個mongod --dbpath=/Users/mingyi/Documents/MingYi/data/db/ --port=27066 --logpath=/Users/mingyi/Documents/MingYi/mongo.log --fork
1 | 2022-10-07T22:56:46.577+0800 I CONTROL [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none' |
補充:
要關閉 mongod,需要先連進去 MongoDB Server
mongosh –port 27066
db.shutdownServer()
journal, journalCommitInterval
journal
就是所有對 mongod 操作的內容,使得 crash 時,所有操作變成可恢復性,預設是開啟
journalCommitInterval <value>
,journal預設是100ms
,時間設定越短即寫入硬碟頻率越高,對硬碟效能很吃重。
profile, slowms
slowms
: 設定多少毫秒為慢
操作,預設100ms
--profile <level>
: 協助檢測效能差的操作設定- 0: default 設定,不啟用
- 1: 只記錄執行時間超過 slowms 的操作
- 2: 記錄全部操作
設定 profile 對效能會有部分影響,但影響多巨大就真的吃各種狀況,無法概括而論,但效能調整遇到瓶頸時,開啟 1
是很有幫助的。
後續還有很多設定,我就不再節錄使用結果
--pidfilepath <path>
: 指定儲存 mongod Process ID 的路徑--keyFile <file>
: 使用 Sharded cluster 或是 Replica set 時,用來相互認證的鑰匙檔案,內容相符才會互相認識成為一個群組--dictoryperdb
: 按照 DB 來分資料夾儲存,好處是能夠減少每份檔案大小,理論上對效能是有幫助的--oplogSize <value>
: 設定 oplog 大小,如果資料同步速度 < 寫入速度,那 oplog 遲早會不夠用,一但觸到上限,就會自動遺棄掉最早的操作記錄,要很小心。
還有非常多設定,上面就是舉一些有印象修改過的內容給大家參考。
- Reference: 官方 mongod 文件
介紹了很多設定,總不可能在啟動時輸入一大堆指令吧!一來是非常的不方便,二來是難以做 CI/CD,因此寫成一個設定檔是必須的,設定檔的格式為 YAML
(YAML)。
我們先建立一個 .conf
結尾的檔案,接著編寫其內容:
1 | systemLog: |
接著啟動時只需要使用 -f <path>
即可。
1 | ➜ MingYi mongod -f mongo.conf |
大功告成!
- Reference: MongoDB YAML Configuration