本文記錄在 Linux 伺服器上使用官方二進位壓縮包(tarball)部署 MongoDB Community Edition 的標準流程,涵蓋解壓、目錄規劃、啟動參數、驗證與常見問題,適合無套件管理器或需自訂安裝路徑的環境。
# 範例:MongoDB 4.4+(請至官網確認最新版本連結)
cd /opt
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-6.0.12.tgz
tar -zxvf mongodb-linux-x86_64-rhel80-6.0.12.tgz
mv mongodb-linux-x86_64-rhel80-6.0.12 mongodb-6.0.12
ln -s mongodb-6.0.12 mongodb # 方便版本切換
mkdir -p /data/mongodb/{data,logs}
# 建議由專用使用者運行
useradd -r -s /sbin/nologin mongodb
chown -R mongodb:mongodb /data/mongodb /opt/mongodb-6.0.12
# /etc/mongod.conf
systemLog:
destination: file
path: /data/mongodb/logs/mongod.log
logAppend: true
storage:
dbPath: /data/mongodb/data
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 2 # 依實體記憶體調整,通常 50%-60%
net:
port: 27017
bindIp: 127.0.0.1,10.0.0.5 # 內網 IP,生產勿綁 0.0.0.0
processManagement:
fork: true
pidFilePath: /var/run/mongodb/mongod.pid
timeZoneInfo: /usr/share/zoneinfo
# security:
# authorization: enabled # 啟用認證後再取消註解
# 建立 pid 目錄
mkdir -p /var/run/mongodb
chown mongodb:mongodb /var/run/mongodb
# 以 mongodb 使用者啟動
sudo -u mongodb /opt/mongodb/bin/mongod -f /etc/mongod.conf
# 檢查日誌
tail -f /data/mongodb/logs/mongod.log
# 看到 "Waiting for connections on port 27017" 即成功
# 連線測試
/opt/mongodb/bin/mongo --host 127.0.0.1 --port 27017 --eval "db.runCommand({ping:1})"
# /etc/systemd/system/mongod.service
[Unit]
Description=MongoDB Database Server
After=network.target
Documentation=https://docs.mongodb.org/manual
[Service]
User=mongodb
Group=mongodb
Environment="OOM_SCORE_ADJ=-1000"
ExecStart=/opt/mongodb/bin/mongod -f /etc/mongod.conf
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
LimitFSIZE=infinity
LimitCPU=infinity
LimitAS=infinity
LimitNOFILE=64000
LimitNPROC=64000
LimitMEMLOCK=infinity
TasksMax=infinity
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now mongod
systemctl status mongod
| 現象 | 原因與解決 |
|---|---|
| 啟動即退出,日誌提示 "NonExistentPath: Data directory not found" | dbPath 目錄不存在或權限錯誤,檢查 mkdir/chown |
| 連線被拒絕 | bindIp 未包含客戶端 IP、防火牆阻擋、mongod 未啟動 |
| 記憶體不足 OOM Killer 終止進程 | 調整 wiredTiger cacheSizeGB、關閉透明大頁、設定 ulimit |
| 啟動報 "Address already in use" | 端口被佔用,檢查是否已有 mongod 進程或其他服務佔用 27017 |
| 權限錯誤 "Permission denied" 寫入日誌/資料 | 目錄擁有者非啟動使用者,遞迴 chown |
# 關閉(優雅)
sudo -u mongodb /opt/mongodb/bin/mongod --shutdown -f /etc/mongod.conf
# 或
mongo admin --eval "db.shutdownServer()"
# 備份(熱備份)
mongodump --host 127.0.0.1:27017 --db mydb --out /backup/mongodump-$(date +%F)
# 還原
mongorestore --host 127.0.0.1:27017 --db mydb /backup/mongodump-2024-01-15/mydb
# 修復(損壞修復,需停機)
mongod --repair --dbpath /data/mongodb/data
採用二進位包部署可完全掌控版本與路徑,配合 systemd 與標準配置檔,即可建立穩定、可維運的 MongoDB 生產節點。