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






























