一、Mongodb 數據庫角色
1.數據庫用戶角色:
read :提供了讀取所有非系統集合,以及系統集合中的system.indexes, system.js, system.namespaces
readWrite: 包含了所有read權限,以及修改所有非系統集合的和系統集合中的system.js的權限.
2.數據庫管理角色:
dbOwner:該數據庫的所有者,具有該數據庫的全部權限。
dbAdmin:一些數據庫對象的管理操作,但是沒有數據庫的讀寫權限。(參考)
userAdmin:爲當前用戶創建、修改用戶和角色。擁有userAdmin權限的用戶可以將該數據庫的任意權限賦予任意的用戶。
3.集羣管理角色:
clusterAdmin:提供了最大的集羣管理功能。相當於clusterManager, clusterMonitor, and hostManager和dropDatabase的權限組合。
clusterManager:提供了集羣和複製集管理和監控操作。擁有該權限的用戶可以操作config和local數據庫(即分片和複製功能)
clusterMonitor:僅僅監控集羣和複製集。
hostManager:提供了監控和管理服務器的權限,包括shutdown節點,logrotate, repairDatabase等。
4.備份恢復角色:admin數據庫中包含了備份恢復數據的角色。包括backup、restore等等。
5.所有數據庫角色:
readAnyDatabase:具有read每一個數據庫權限。但是不包括應用到集羣中的數據庫。
readWriteAnyDatabase:具有readWrite每一個數據庫權限。但是不包括應用到集羣中的數據庫。
userAdminAnyDatabase:具有userAdmin每一個數據庫權限,但是不包括應用到集羣中的數據庫。
dbAdminAnyDatabase:提供了dbAdmin每一個數據庫權限,但是不包括應用到集羣中的數據庫。
6.超級用戶角色:root。
7.內部角色:__system
官方實例:
use products # mongoDB的權限設置是以庫爲單位的,必選要先選擇庫
db.createUser(
{ "user" : "accountAdmin01",
"pwd": "cleartext password",
"customData" : { employeeId: 12345 },
"roles" : [ { role: "clusterAdmin", db: "admin" },
{ role: "readAnyDatabase", db: "admin" },
"readWrite" ] },
{ w: "majority" , wtimeout: 5000 } ) # readWrite 適用於products庫,clusterAdmin與readAnyDatabase角色適用於admin庫
前提:
1.開啓權限驗證 修改mongod.cfg文件
配置:
security: authorization:enabled
創建超級管理員:
use admin;
db.createUser({ user:'admin', pwd:'123456', roles:[{role:'root',db:'admin'}] })
給單個庫設置管理員:
use zhw
db.createUser( { user:"zhwadmin", pwd:"123456", roles:[{role:"dbOwner",db:"zhw"}] } )
Mongodb 賬戶權限配置中常用的命令:
1、show users; #查看當前庫下的用戶
2、db.dropUser("zhwadmin") #刪除用戶
3、db.updateUser("admin",{pwd:"password"}); #修改用戶密碼
4、db.auth("admin","password"); #密碼認證
備份:
(1)mongoexport/mongoimport #導入/導出的是JSON格式或者CSV格式 1.跨平臺遷移 2.同平臺,跨大版本
(2)mongodump/mongorestore #導入/導出的是BSON格式 日常備份恢復使用
備份工具區別:
(1)JSON可讀性強但體積較大,BSON則是二進制文件,體積小但對人類幾乎沒有可讀性。
(2)BSON格式兼容性不好。
(3)JSON雖然具有較好的跨版本通用性,但其只保留了數據部分,不保留索引,賬戶等其他基礎信息。使用時應該注意。
命令參數說明:
mongoexport --help
#參數說明:
-h:指明數據庫宿主機的IP
-u:指明數據庫的用戶名
-p:指明數據庫的密碼
-d:指明數據庫的名字
-c:指明collection的名字
-f:指明要導出那些列
-o:指明到要導出的文件名
-q:指明導出數據的過濾條件
--authenticationDatabase admin:驗證庫
mongoimport --help
#參數說明:
-h:指明數據庫宿主機的IP
-u:指明數據庫的用戶名
-p:指明數據庫的密碼
-d:指明數據庫的名字
-c:指明collection的名字
-f:指明要導入那些列
mongodump --help
參數說明:
-h:指明數據庫宿主機的IP
-u:指明數據庫的用戶名
-p:指明數據庫的密碼
-d:指明數據庫的名字
-c:指明collection的名字
-o:指明到要導出的文件名
-q:指明導出數據的過濾條件
-j, --numParallelCollections= number of collections to dump in parallel (4 by default)
--oplog 備份的同時備份oplog
格式:
mongoexport/mongoimport :
-- 單表備份至json格式
mongoexport -u賬號 -p密碼 --port 端口 --authenticationDatabase admin -d 庫名 -c 集合名稱 -o /mongodb/log.json
#注意:備份文件的名字可以自定義,默認導出了JSON格式的數據
-- 單表備份至csv格式
mongoexport -u賬號 -p密碼 --port 端口 --authenticationDatabase admin -d 庫名 -c log --type=csv -f uid,name,age,date -o /mongodb/log.csv
恢復
-- 當csv格式的文件頭行,有列名字
mongoimport -u賬號 -p密碼 --port 端口 --authenticationDatabase admin -d 庫名 -c 集合名稱 --type=csv --headerline --file /mongodb/log.csv
-- 當csv格式的文件頭行,沒有列名字 ==>手工添加列名
mongoimport -u賬號 -p密碼 --port 端口 --authenticationDatabase admin -d 庫名 -c 集合名稱 --type=csv -f id,name,age,date --file /mongodb/log1.csv
id,name,age,date是log1.csv的列名
-- 全庫備份
mongodump -u賬號 -p密碼 --port 端口--authenticationDatabase admin -o 放置路徑(如:/mongodb/backup)
-- 備份某個庫
mongodump -u賬號 -p密碼 --port 端口 --authenticationDatabase admin -d 庫名 -o 放置路徑(如:/mongodb/backup)
--備份某個庫下的某個集合
mongodump -u賬號 -p密碼 --port 端口 --authenticationDatabase admin -d 庫名-c 集合名稱 -o 放置路徑(如:/mongodb/backup)
-- 壓縮備份
mongodump -u賬號 -p密碼 --port 端口 --authenticationDatabase admin -d 庫名 -o 放置路徑(如:/mongodb/backup) --gzip #壓縮備份某個整個數據庫
-- 恢復某個庫
mongorestore -u賬號 -p密碼 --port 端口 --authenticationDatabase admin -d 庫名 備份的路徑
--恢復某個庫下的某個集合
mongorestore -u賬號 -p密碼 --port 端口 --authenticationDatabase admin -d 庫名 -c 集合 --gzip 存訪備份的文件路徑
--drop表示恢復的時候把之前的集合drop掉(危險)
mongorestore -u賬號 -p密碼 --port 端口 --authenticationDatabase admin -d 庫名 --drop 存訪備份的路徑
官方文檔:https://docs.mongodb.com/manual/sharding/
社區:https://mongoing.com/archives/docs/mongodb初學者教程/mongodb分片