linux 安裝配置MongoDB 5.0
概覽
系統 | mongoDB | 安裝方式 |
---|---|---|
ubuntu 20 | mongoDB 5.0.6 | apt |
需記憶的資訊
相關路徑
data | log | 配置檔案 |
---|---|---|
/var/lib/mongodb | /var/log/mongodb | /etc/mongod.conf |
常用命令
sudo systemctl start mongod sudo systemctl stop mongod sudo systemctl restart mongod sudo systemctl status mongod # 開啟啟動 sudo systemctl disable mongod sudo systemctl enable mongod
安裝
流程
flowchart LR
安裝 --> 建立使用者 --> 配置檔案裡開啟authorization --> 重啟mongod
安裝過程
sudo apt-get install gnupg wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add - sudo apt-get install gnupg echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list sudo apt-get update sudo apt-get install -y mongodb-org
鎖定更新
echo "mongodb-org hold" | sudo dpkg --set-selections echo "mongodb-org-database hold" | sudo dpkg --set-selections echo "mongodb-org-server hold" | sudo dpkg --set-selections echo "mongodb-org-shell hold" | sudo dpkg --set-selections echo "mongodb-org-mongos hold" | sudo dpkg --set-selections echo "mongodb-org-tools hold" | sudo dpkg --set-selections
使用者驗證和許可權管理
說明:
1. mongodb 分散式資料庫,使用者驗證(本文稱為client auth)和叢集成員間的驗證(本文稱為internal auth) internal auth 使用keyfiles kms之類的驗證,先不管它
2. 使用者是和庫繫結的,或者說使用者驗證的粒度是庫級別,而不是整個例項級別
3. 不同的庫下面可以有相同的使用者名稱
4. 一般建立一個root賬戶,再建立一些普通使用者做日常操作
5. 一般來說應用使用的使用者只需要readWrite角色即可
mongosh進入後
// 建立root賬戶
use admin
db.createUser({user: "root",pwd: "root",roles: [ { role: "root", db: "admin" } ]})
// 建立日常用的普通賬戶
use test
/* 具體建立資訊自行修改 */
db.createUser(
{
user: "xyz",
pwd: "xyz123",
roles: [ { role: "readWrite", db: "test" },
{ role: "read", db: "reporting" } ]
}
)
如上,xyz使用者只能登入test/reporting資料庫,許可權為分佈讀寫/讀
接下來,只需開啟authorization,就可以登入了
sudo vim /etc/mongod.conf
# 修改後重啟
sudo systemctl restart mongod
#登入 localhost主機下的admin資料庫
mongosh localhost/admin -u root -p
使用者角色
Built-In Roles(內建角色):
1. 資料庫使用者角色:read、readWrite;
2. 資料庫管理角色:dbAdmin、dbOwner、userAdmin;
3. 叢集管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 備份恢復角色:backup、restore;
5. 所有資料庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超級使用者角色:root
// 這裡還有幾個角色間接或直接提供了系統超級使用者的訪問(dbOwner 、userAdmin、userAdminAnyDatabase)
7. 內部角色:__system
使用者有關操作示例
use admin
//檢視當前庫內已有使用者
show users
//檢視當前庫內可用的roles,預設只有built-in roles
show roles
//建立使用者,roles可以使用當前庫內的角色,或者其他庫內的角色
db.createUser({user: "root",pwd: "root",roles: [ { role: "root", db: "admin" } ]})
//如何修改密碼
db.changeUserPassword('root','rootNew');
//已有使用者新增和解除built-in roles
db.grantRolesToUser('<username>', [{ role: '<built-in role>', db: 'admin' }])
db.revokeRolesFromUser( "<username>", [{ role: '<built-in role>', db: 'admin' }])
//刪除使用者命令如下,雖然所有庫的使用者資訊全存在admin的system.users中,刪使用者時還是要use <庫名>才能刪除
use db_name
db.dropUser("<username>")
exit
//退出
由於使用者驗證是庫級別的,切換db時有時需要驗證
db.auth('root','password')
配置檔案
需要修改的地方
net:
bindIp: 0.0.0.0 #或者某個IP
#啟用 使用者驗證
security:
authorization: enabled # 網路上的auth: true 不行,坑死了
配置檔案的官方說明
寫法和網上找的老版mongoDB有區別,注意是 **YAML 格式 **
網路上講的 fork=true # 以建立子程序的方式執行
,
- 本質上是daemon mode,守護程序,沒有控制終端而無法與前臺互動。
- 寫法注意
processManagement.fork
寫在 processManagement下 - 目前我看來沒用,用了沒法互動,官方也沒預設沒推薦
其它工具
mongosh
舊的是 mongo (deprecated)
注意 這是 javascript的互動式終端,甚至可以執行命令
1+1
# (不指定其它資訊 自動進入test資料庫)
mongosh
mongosh的連線方式
mongosh mongodb://username:password@hostname/dbname
#或者
mongosh hostname/dbname -u username -p password
# 帶引數 安裝模式
mongodb://localhost/?safe=true
安全模式連線
safe=true|false
true: 在執行更新操作之後,驅動都會發送getLastError命令來確保更新成功。(還要參考 wtimeoutMS).
false: 在每次更新之後,驅動不會發送getLastError來確保更新成功。
mongosh 的 Editor Mode
shell中編輯大段的程式碼不方便,因此可以使用mongosh的編輯器模式;
config.set( "editor", "vim" )
config.set( "editor", "nano" )
config.set("editor","code --wait") // code特殊必須加 --wait
// 啟動編輯模式
edit
// 編輯變數 直接編輯[ ]
let albums=[];
edit albums // 或者直接 edit let albums=[]
config.set('editor',null) // 取消編輯器設定
MongoDB for VSCode 外掛
視覺化管理 compass
wget https://downloads.mongodb.com/compass/mongodb-compass_1.30.1_amd64.deb
sudo dpkg -i mongodb-compass_1.30.1_amd64.deb
啟動compass
mongodb-compass
解除安裝MongoDB
sudo service mongod stop
sudo apt-get purge mongodb-org*
sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongodb