本文介紹 MongoDB Community Edition 在 Ubuntu 下的安裝和常見配置方法。文中操做基於 MongoDB Community Edition 4.2.2 和 Ubuntu 18.04 。對於不一樣的系統和版本,操做方式和方法可能會有不一樣。html
基礎安裝
本節簡單講解在Ubuntu下 MongoDB 基本的安裝步驟。linux
- 安裝GPG公鑰
wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
- 添加APT源
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
- 重載本地包數據庫
sudo apt-get update
- 安裝mongoDB
sudo apt-get install -y mongodb-org
- 檢查mongoDB包安裝信息
apt list --installed mongodb*
正常狀況下,能夠看到如下信息mongodb-org/bionic,now 4.2.2 amd64 [installed] mongodb-org-mongos/bionic,now 4.2.2 amd64 [installed] mongodb-org-server/bionic,now 4.2.2 amd64 [installed] mongodb-org-shell/bionic,now 4.2.2 amd64 [installed] mongodb-org-tools/bionic,now 4.2.2 amd64 [installed]
- 啓動系統服務
sudo systemctl enable mongod.service sudo systemctl start mongod.service
- 檢查服務狀態
systemctl status -l mongod.service
若是mongod.service
的狀態不是active(running)
,能夠根據systemctl status
命令的輸出和日誌文件/var/log/mongodb/mongod.log
來排查問題緣由。
客戶端鏈接
當 MongoDB 服務啓動成功後,能夠使用 MongoDB JavaScript Shell 客戶端來訪問數據庫了:mongodb
mongo --host 127.0.0.1 --port 27017
默認配置下,MongoDB 監聽本地localhost
的27017
端口。此時,啓動 MongoDB JavaScript Shell 時也能夠省略地址和端口參數。鏈接成功後就能夠操做數據庫了。好比查看現有的database:shell
> show dbs; admin 0.000GB config 0.000GB local 0.000GB
安裝操做詳解
接下來會對安裝過程作進一步講解,基於這部份內容,能夠對 MongoDB 的安裝和基本配置進行部分自定義。數據庫
安裝指定組件和版本
在一節內容中,能夠看到當 MongoDB 的包安裝完成後,能夠看到多個組件被安裝。這些組件分別是ubuntu
包名 | 描述 |
---|---|
mongodb-org | 包含全部組件包的元包,安裝此包會包含如下全部組件 |
mongodb-org-server | MongoDB 服務器,主要是 mongod 進程程序和相關資源和腳本 |
mongodb-org-mongos | mongos 進程,用於在 MongoDB 分片集羣中將客戶端請求分發到各服務節點 |
mongodb-org-shell | MongoDB JavaScript Shell 客戶端 |
mongodb-org-tools | 其餘 MongoDB 工具, mongoimport, bsondump, mongodump, mongoexport,mongofiles,mongorestore,mongostat,和mongotop |
能夠根據須要安裝指定的組件,好比只安裝 MongoDB JavaScript Shell 來訪問遠程服務:服務器
sudo apt install mongodb-org-shell
系統服務配置
當 MongoDB 服務安裝完成後,會建立系統服務文件 /lib/systemd/system/mongod.service
。能夠根據須要修改此文件。app
好比,服務文件裏包含如下一些配置:ionic
[Service] User=mongodb Group=mongodb ExecStart=/usr/bin/mongod --config /etc/mongod.conf
User
和Group
指定了啓動 MongoDB 服務進程所使用的用戶mongodb
和同名用戶組mongodb
。這個用戶和用戶組是在安裝 MongoDB 時自動建立的。能夠在必要時指定爲指望的值。當修改後,要注意同時修改相關目錄和文件的權限。ide
ExecStart
指定了啓動服務進程的命令,能夠看到這裏顯示指定了使用配置文件/etc/mongod.conf
。能夠修改這條配置項讓數據庫使用其餘配置文件,也能夠添加其餘啓動參數。
若是但願在同一臺服務器上啓動多個 MongoDB 服務,能夠複製服務文件,並修改後啓用。
若是是在啓用服務以後對服務文件作了修改,須要重載配置再重啓服務:
sudo systemctl daemon-reload sudo systemctl restart mongod.service
基礎配置
本節介紹一些 MongoDB 配置文件中經常使用的配置項。默認狀況下,這些配置保存在文件/etc/mongod.conf
中。當配置項修改後,須要重啓服務才能生效。
指定監聽地址和端口
默認狀況下,非分片集羣下的 MongoDB 監聽 localhost
上的 27017
端口。在沒有顯示指定配置文件時,這個是由配置文件中的 net.port
和net.bindIp
配置頂控制:
# network interfaces net: port: 27017 bindIp: 127.0.0.1
這時, MongoDB 只接受來自於同一臺服務器上的本地鏈接,因此一般都會須要修改監聽的地址。好比但願監聽全部的IPv4地址,就能夠將 net.bindIp
項的值由 127.0.0.1
修改成 0.0.0.0
。若是須要調整監聽的端口,則將 net.port
配置頂的值由 27017
修改成指望值。
修改數據存儲
MongoDB 的數據存儲目錄是由配置文件中的 storage.dbPath
配置項來控制的。默認狀況下數據保存在 /var/lib/mongodb
目錄下:
# Where and how to store data. storage: dbPath: /var/lib/mongodb
能夠根據本身的須要修改數據目錄。在修改以前要確保目錄已經存在,而且權限設置正確。目錄的全部者應當爲 mongodb:mongodb
,或者啓動進程的用戶有讀寫權限。
若是數據庫以前已經有數據了,須要把以前數據目錄下的文件都複製到新目錄下,不然 MongoDB 會新建空的數據文件結構。
修改日誌配置
默認狀況下 MongoDB 日誌記錄在文件 /var/log/mongodb/mongod.log
中。這個是由 systemLog
相關配置項決定的:
# where to write logging data. systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log
若是要修改日誌文件位置,就根據須要修改 systemLog.path
配置項的值。不過要注意日誌文件所在目錄的權限。運行 MongoDB 進程的用戶須要有日誌目錄的讀寫權限。默認狀況下使用的用戶是 mongodb:mongodb
。
若是但願日誌文件能夠輪轉(log rotate),則須要添加配項 systemLog.logRotate
:
# where to write logging data. systemLog: destination: file logAppend: true logRotate: true path: /var/log/mongodb/mongod.log
訪問控制
默認配置下,MongoDB 是沒有開啓訪問控制的。此時,用戶訪問數據庫不須要作驗證,而且擁有全部的權限。因此在安裝完成後,應當馬上開啓數據庫的訪問控制。
- 鏈接到本地數據庫後,在客戶端執行如下命令
use admin db.createUser( { user: "admin", pwd: passwordPrompt(), roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ] } )
此命令用在admin
數據庫下建立一個名爲admin
的帳號。createUser
方法參數JSON中的pwd
字段用來指定帳號的密碼。這裏指定的是另外一個方法passwordPrompt
。這個方法在執行createUser
命令時,會提示並等待用戶在客戶端輸入密碼。roles
指定用戶的角色和權限。這裏給admin
受權的第一個權限是admin
數據庫的管理權限。admin
數據庫是 MongoDB 用來管理用戶的,因此有了這個權限,就能夠用來管理數據庫的其餘帳號了。第二個權限readWriteAnyDatabase
是對全部數據庫的讀寫權限。 - 在Ubuntu終端中關閉 MongoDB 服務:
sudo systemctl stop mongod.service
- 在配置文件將
security.authorization
配置頂設置爲true
來開啓訪問控制:security: authorization: enabled
- 啓動 MongoDB 服務來使配置生效:
sudo systemctl start mongod.service
- 使用
admin
登陸mongo -u admin -p
- 給應用數據庫建立帳號,好比
app_db
下建立帳號app_admin
:use app_db db.createUser( { user: "app_admin", pwd: passwordPrompt(), roles: [ "readWrite" ] } )
這裏建立的帳號是有app_db
下的讀寫權限readWrite
的。若是想建立只讀帳號,則須要指定權限爲read
。
- 使用普通帳號登陸
mongo --authenticationDatabase app_db -u app_admin -p
和以前使用admin
帳號登陸不一樣,這裏指定了authenticationDatabase
參數值爲app_db
,由於app_admin
是在app_db
下建立的帳號。
參考資料
- Install MongoDB Community Edition on Ubuntu
- MongoDB Reference: Configuration File Options
- MongoDB Security: Enable Access Control
- Red Hat Enterprise Linux - System Administrator's Guid - Creating and Modifying systemd Unit Files
原文出處:https://www.cnblogs.com/mithrilon/p/12056301.html