MongoDB從入門到實戰之Docker快速安裝MongoDB
這一章開始我們就開始實戰篇教程,為了快速把MongoDB使用起來我將會把MongoDB在Docker容器中安裝起來作為開發環境使用。然后我這邊MongoDB的可視化工具用的是Navicate。廢話不多說,我們先花了幾分鐘開始的把MongoDB環境搭建起來。
查看可用的MongoDB版本
- 訪問DokcerHub中的MongoDB鏡像庫地址:https://hub.docker.com/_/mongo/tags
- 可以通過 Sort by 查看其他版本的MongoDB,查看最新版本MongoDB鏡像(mongo:latest):https://hub.docker.com/_/mongo/tags?page=1&name=latest
圖片
此外,我們還可以用docker search mongo命令來查看可用版本:
圖片
拉取最新版本的MongoDB鏡像
- 注意假如你鏡像拉取超時可以看看這里(多平臺容器鏡像代理服務):https://dockerproxy.github.io/#/index
docker pull mongo:latest
注意:tag是可選的,tag表示標簽,多為軟件的版本,默認是latest版本(最新版)
圖片
圖片
驗證MongoDB鏡像是否成功拉取到本地
使用以下命令來查看MongoDB鏡像是否成功拉取到本地:
docker images
圖片
創建并運行一個MongoDB容器
docker run -itd --name mongo-test -p 27017:27017 mongo --auth
參數說明:
- -itd:其中,i是交互式操作,t是一個終端,d指的是在后臺運行。
- --name mongo-test:容器名稱
- -p 27017:27017 :映射容器服務的 27017 端口到宿主機的 27017 端口。外部可以直接通過 宿主機 ip:27017 訪問到 mongo 的服務。
- --auth:需要密碼才能訪問容器服務(注意:安全問題,MongoDB默認是不開啟權限驗證的,不過設置了這里就相當于修改MongoDB的配置auth=ture啟用權限訪問)。
圖片
圖片
進入創建的MongoDB容器
docker exec -it mongo-test mongosh
圖片
MongoDB報錯"ongoServerError: not authorized on admin to execute command"
MongoDB默認是不需要用戶密碼就可以連接的,如果使用命令報錯"ongoServerError: not authorized on admin to execute command ",則表示當前登陸用戶不具備相應權限。
圖片
解決辦法:在admin數據庫中通過創建一個用戶,賦予用戶root權限。
# 進入admin數據庫
use admin
# 創建一個超級用戶
db.createUser(
{
user:"root",
pwd:"123456",
roles:[{role:"root",db:"admin"}]
}
);#授權登錄db.auth('root','123456')
圖片
MongoDB用戶權限管理
MongoDB添加用戶命令說明
- user字段,為新用戶的名字。
- pwd字段,用戶的密碼。
- cusomData字段,為任意內容,例如可以為用戶全名介紹。
- roles字段,指定用戶的角色,可以用一個空數組給新用戶設定空角色。在roles字段,可以指定內置角色和用戶定義的角色。
- 超級用戶的role有兩種,userAdmin或者userAdminAnyDatabase(比前一種多加了對所有數據庫的訪問,僅僅是訪問而已)。
- db是指定數據庫的名字,admin是管理數據庫。
- 不能用admin數據庫中的用戶登錄其他數據庫。注:只能查看當前數據庫中的用戶,哪怕當前數據庫admin數據庫,也只能查看admin數據庫中創建的用戶。
MongoDB數據庫角色說明
- 數據庫用戶角色:read、readWrite。
- 數據庫管理角色:dbAdmin、dbOwner、userAdmin。
- 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManage。
- 備份恢復角色:backup、restore。
- 所有數據庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase。
- 超級用戶角色:root。
- 內部角色:__system。
MongoDB中的role詳解
- Read:允許用戶讀取指定數據庫。
- readWrite:允許用戶讀寫指定數據庫。
- dbAdmin:允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profile。
- userAdmin:允許用戶向system.users集合寫入,可以在指定數據庫里創建、刪除和管理用戶。
- clusterAdmin:只在admin數據庫中可用,賦予用戶所有分片和復制集相關函數的管理權限。
- readAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀權限。
- readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀寫權限。
- userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限。
- dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的dbAdmin權限。
- root:只在admin數據庫中可用。超級賬號,超級權限。
首先切換到admin數據庫中
# 進入admin數據庫
use admin
創建admin超級管理員用戶
指定用戶的角色和數據庫: (注意此時添加的用戶都只用于admin數據庫,而非你存儲業務數據的數據庫) (在cmd中敲多行代碼時,直接敲回車換行,最后以分號首尾)。
db.createUser(
{ user: "admin",
customData:{description:"superuser"},
pwd: "admin",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
創建一個不受訪問限制的超級用戶
擁有所有權限,不受任何限制。
db.createUser(
{
user:"root",
pwd:"123456",
roles:[{role:"root",db:"admin"}]
}
)
創建一個業務數據庫管理員用戶
只負責某一個或幾個數據庫的増查改刪。
db.createUser({
user:"user001",
pwd:"123456",
customData:{
name:'jim',
email:'jim@qq.com',
age:18,
},
roles:[
{role:"readWrite",db:"db001"},
{role:"readWrite",db:"db002"},
'read'// 對其他數據庫有只讀權限,對db001、db002是讀寫權限
]
})
服務器配置27017的開放端口
圖片
Navicat連接mongoDB并創建集合和添加數據
1.連接MongoDB點擊這個位置
圖片
2、連接參數介紹
- Standalone:單機模式,是MongoDB最基本的部署方式。在這種模式下,MongoDB運行在一個單一的服務器上,適合用于開發、測試或者小型應用。由于它不具備高可用性和可擴展性,因此不適用于大型生產環境或需要高可靠性的場景。
- Shard Cluster:分片集群,是MongoDB提供的一種用于橫向擴展存儲和計算能力的分布式部署模式。通過分片,可以將數據集分割成多個部分,并分布到集群中的不同節點上。每個節點存儲數據的一個子集,從而提高了數據的訪問效率和系統的可擴展性。
- Replica Set:副本集,是MongoDB提供的一種高可用性和數據冗余的部署模式。它由一組MongoDB實例組成,這些實例之間通過復制和故障轉移來保持數據的一致性和可用性。
一般情況下,我們連接只需要連接主庫查數據,所以選擇單例連接方式即可,填寫好常規參數可以點擊測試連接是否正常,即可連接!
圖片
3、新建MongoDB數據庫(MyMondoDBTest)
圖片
圖片
4、新建MongoDB文檔(Books)并添加數據
圖片
圖片
圖片
圖片
圖片