MongoDB從入門到優化


一、MongoDB 簡介

本文的內容是基於 MongoDB 4.0 的。 參考於 MongoDB 4.0 官方文檔。

​ MongoDB 是由C++語言編寫的,是一個基於分布式文件存儲的開源數據庫系統。屬於 nosql 數據庫。MongoDB 數據庫中最小的數據單元是文檔,它是由 key 和 value 組成的數據結構, MongoDB 文檔類似於 JSON 對象。value 的值可以是數組、字符串、數值、文檔。

image

主要優點

​ 支持多語言、高性能、豐富的查詢語言、高可用性、可擴展、支持多個儲存引擎、高效存儲二進制大對象 (比如照片和視頻)。

4.0版本的優勢:

  • MongoDB 4.0版將文檔模型的速度,靈活性和功能與ACID保證相結合。
  • MongoDB 4.0版借助事務特性,使得備節點不再因為同步日志而阻塞讀取請求。
  • MongoDB 4.0版提供並發的讀取和寫入能力,使得新增分片shard遷移性能提升了約 40%, 新增節點能更快的承載業務壓力。

MongoDB 與 mysql 對比

SQL Terms/Concepts MongoDB Terms/Concepts
database database
table collection
row document or BSON document
column field
index index
table joins embedded documents and linking
primary keySpecify any unique column orcolumn combination as****primary key. primary keyIn MongoDB, the primary key isautomatically set to the _id field.
aggregation (e.g. group by) aggregation pipelineSee the SQL to Aggregation MappingChart.

應用場景

位置查詢的移動類APP,儲存數據結構易變化的數據。

電商后台(商品更新記錄,會員每天虛擬幣余額(定時獲取),會員賬號信息,訂單信息等等) 。

儲存用戶發表的朋友圈。

儲存直播行業的用戶信息、禮物信息以及日志等信息,同時可通過豐富的聚合查詢來進行業務分析。

二、MongoDB 的儲存引擎

MongoDB 有三大儲存引擎,分別是 WiredTiger 、In-Memory 、MMAPv1。

  • **WiredTiger **

    是MongoDB 3.2 中的默認儲存引擎,是多線程的,它適合大多數的工程場景,支持文檔級別的並發,壓縮等功能,官方建議使用該儲存引擎。在3.6版本后 WiredTiger 每60s將數據寫入到磁盤,在下一次寫入成功前,本次節點的數據仍然有效。當發生故障時,MongoDB 可以從最后的一次成功寫入進行恢復。

  • **In-Memory **

    In-Memory 只能在 企業版本中使用,它不是將文檔儲存在磁盤上,而是保存在內存上,實現更快的檢索。

  • MMAPv1

    是 MongoDB 3.0 之前的更早版本的默認儲存引擎。從 MongoDB 4.0 開始官方不推薦使用該引擎。

MongoDB 如何保證數據的完整性 ,通過檢查點(也就是每60s寫入一次)和事務性日志來確保數據的完整性和持久性。

我們接下來介紹下 我們常用的引擎 WiredTiger 的相關信息:

WiredTiger

WiredTiger 日志

日志功能默認啟用。 WiredTiger 日志會在檢查點之間保留所有數據修改。如果 MongoDB 在檢查點之間退出,它將使用日志重播自上一個檢查點以來修改的所有數據。

我們可以禁用日志功能,來減少開啟日志功能所需要的開銷。但是這樣也就意味着,當MongoDB 非正常退出時,最后一個檢查點之后的數據將會都丟失。

WiredTiger 日志默認啟用數據壓縮。此日志非 MongoDB 的日志文件,而是 WiredTiger 日志,通過該日志我們可以獲取上一個檢查點之后發生的操作。

使用日志功能,恢復流程:

  1. 先查看數據文件查找最后一個檢查點的位置的標識符。
  2. 在日志文件中搜索與檢查點標識符相匹配的記錄。
  3. 獲取從上一個檢查點之后的操作。

日志文件會在 dbpath 下以 journal 命名的子目錄下,以形如 WiredTigerLog.0000000001 格式的文件名儲存。

WiredTiger 的最小日志記錄大小為128個字節。如果日志記錄是128字節或更小,WiredTiger 不會壓縮該記錄。

日志文件包含每個寫操作的記錄。每條記錄都有唯一的標識符。MongoDB 將 WiredTiger 配置為對日記數據使用snappy壓縮。

MongoDB 的 WiredTiger 日志文件的最大大小限制大約為100 MB。一旦文件超過該限制,WiredTiger就會創建一個新的日志文件。

WiredTiger 會自動刪除舊日志文件,以僅維護從上一個檢查點恢復所需的文件。

數據壓縮

使用 WiredTiger,MongoDB支持對所有集合和索引進行壓縮。壓縮是以 CPU 為代價來減少磁盤的使用。默認情況下,WiredTiger 會對數據進行壓縮。在大多數情況下,默認的壓縮設置以及平衡了 儲存空間和 CPU 使用率。

內存使用

從 MongoDB 3.4開始,默認WiredTiger內部緩存大小取值是取以下兩個值中的較大者:

  • (totalRAM - 1G) 50%
  • 256MB

例如 一個主機的內存是 4G ,那么取值為 1.5G, 如果是 1.25G,那么取值為256M。

調整 內存使用,需要使用 storage.wiredTiger.engineConfig.cacheSizeGB內部緩存和 --wiredTigerCacheSizeGB。 兩個參數。

三、mongodb 配置參數

Mongodb 建議使用 YAML 格式的配置文件,也支持 ini 格式的配置文件。

ini 配置文件參數解析

https://docs.mongodb.com/v2.4/reference/configuration-options/

bind_ip=0.0.0.0  #綁定的 ip,如果是 0.0.0.0 就是綁定本地所有ip
port=27037  # 監聽端口號,默認為27017。
unixSocketPrefix=/opt/mongodb # 設置socket 文件的路徑 默認是 /tmp 目錄 2020/02/24補充
dbpath=/opt/mongodb/data/ # 數據儲存的位置 
logpath=/opt/mongodb/logs/mongodb.log # 日志儲存的位置
pidfilepath=/opt/mongodb/logs/mongod.pid # pid文件儲存的位置
logRotate= rename/reopen
	#3.0.0版中的新功能。可以取值為 rename 或 reopen:
        rename 重命名日志文件。每次重啟都會重命名日志文件。
        reopen 按照典型的 Linux/Unix 日志循環行為關閉並重新打開日志文件。使用 reopen 使用的     		Linux/Unix logrotate的工具時,以避免日志的丟失。
        如果指定 reopen,則還必須使用 logappend
logappend= true # 當 MongoDB 實例重新啟動時,將新的日志內容添加到現有日志文件的末尾。如果沒有此選項,MongoDB 將備份現有日志並創建新文件。
listenBacklog= 128 #偵聽隊列中可以存在的最大連接數。取決於 /proc/sys/net/core/somaxconn 這個值
maxConns= 500  #最大連接數
directoryperdb=true # 將每個數據庫的數據分目錄儲存
# replS=fymongodb # 在配置副本集的時候設置副本集名稱,單節點的不需要設置該參數
auth=true # 開啟登錄驗證
fork=true # 后台運行
journal=true # 開啟預寫日志

YAML 配置文件 參數解析

systemLog:  # 日志配置 日志切割見文章:https://dwz.cn/VPxxTf38
   destination: file
   path: "/opt/mongodb/logs/mongodb.log"  
   logAppend: true
   timeStampFormat: "iso8601-local"  # 日志使用的時間格式,默認為iso8601-local,可選值 ctime、iso8601-utc、iso8601-local。
   # 還有更詳細的組件、控制、索引、回滾等日志的輸出等級配置見官網
processManagement: # 進程控制配置
   fork: true  #后台以守護進程運行
   pidFilePath: "/opt/mongodb/logs/mongod.pid"  # pid 文件路徑
   timeZoneInfo: "/usr/share/zoneinfo/Asia/Shanghai"  #數據庫使用的時區,未設置使用系統默認
net:
   bindIp: "0.0.0.0"  # 綁定的ip,127.0.0.1/0.0.0.0/::,0.0.0.0(綁定到所有IP地址),與bindIpAll 參數是互斥的
   bindIpAll: <boolean>  # 是否綁定本地所有ip,與bindIp 參數是互斥的
   port: 27017  # 綁定的端口,默認值27017
   maxIncomingConnections: 500 # 最大同時連接數,默認值為65536
   wireObjectCheck: <boolean>  # 對客戶端的寫入進行驗證,會有較小的性能影響,默認為 True.
   unixDomainSocket:  # 2020/02/24 新加
      enabled: <boolean>  # 默認為 ture, 是否開啟套接字監聽
      pathPrefix: <string> # 默認 /tmp 目錄,
      filePermissions: <int> # 設置套接字文件權限,默認0700
   ssl:  # ssl 的詳細配置
      sslOnNormalPorts: <boolean>  # deprecated since 2.6
      certificateSelector: <string>
      clusterCertificateSelector: <string>
      mode: <string>
      PEMKeyFile: <string>
      PEMKeyPassword: <string>
      clusterFile: <string>
      clusterPassword: <string>
      CAFile: <string>
      clusterCAFile: <string>
      CRLFile: <string>
      allowConnectionsWithoutCertificates: <boolean>
      allowInvalidCertificates: <boolean>
      allowInvalidHostnames: <boolean>
      disabledProtocols: <string>
      FIPSMode: <boolean>
   compression:
      compressors: <string> # 通信壓縮器,可取值 snappy、zlib(版本3.6+可用)、disabled,默認值snappy,
   serviceExecutor: <string> #線程執行模型 3.6+版本使用,默認值: synchronous,可取值 adaptive、synchronous
storage: # 數據儲存配置
   dbPath: "/opt/mongodb/data/"   #  mongod 數據儲存的位置
   indexBuildRetry: <boolean> # mongod 在下次啟動重新構建不完整索引,默認為True,不能與replication.replSetName 一起使用
   repairPath: <string>   
   journal: 
      enabled: <boolean> # 是否開啟journal日志在64位系統默認為 true,在32位系統為false,建議啟用
      commitIntervalMs: <num> # 設置日志儲存到磁盤的間隔時間,默認為100毫秒,可以設置為1-500.
   directoryPerDB: <boolean>  # 是否開啟分目錄儲存數據,默認值為 False,
   syncPeriodSecs: <int>  # MongoDB通過fsync操作將數據儲存到磁盤的時間,默認值 60,單位秒,不建議更改此值
   engine: <string> # 儲存引擎,默認值wiredTiger,MongoDB不推薦使用MMAPv1存儲引擎
   wiredTiger:    # wiredTiger 儲存引擎配置
      engineConfig:
         cacheSizeGB: <number>  # 內部緩存內存大小,默認是取50% of (RAM - 1 GB)和256 MB的最大者,可設置值為 0.25G-10000G,如果一台服務器有多個MongoDB實例或者運行在docker中,需要設置該值,避免多台實例占用完系統的所有內存,和mongodb在容器中獲取不到實際內存大小。
         journalCompressor: <string> # WiredTiger日志數據的壓縮類型 默認值 snappy,可選值 none、snappy、zlib.
         directoryForIndexes: <boolean> # 將index儲存到一個目錄,並軟連接到數據目錄,默認值為False,
      collectionConfig: 
         blockCompressor: <string>  # 集合數據的壓縮類型,默認值 snappy,可選值 none、snappy、zlib.
      indexConfig:
         prefixCompression: <boolean> # 啟用的索引的前綴壓縮 默認值為 true
   inMemory:  # inmemory 引擎配置
      engineConfig:
         inMemorySizeGB: <number>  # 設置 inmemory 引擎分配的最大內存默認為50%(RAM - 1 GB)
security:
   keyFile: <string> #儲存密鑰文件的路徑,用於存儲MongoDB實例用於在分片集群或副本集中相互進行身份驗證的共享密鑰 
   clusterAuthMode: <string> #集群驗證模式
   authorization: <string> #啟用基於角色的訪問控制,可選值enabled、disabled默認值為禁用,建議開啟

operationProfiling:  # 開啟慢查詢
   mode: <string>  # 慢查詢模式 可選值,off、slowOp、all,默認值off。建議開啟
   slowOpThresholdMs: <int>  # 閾值,默認值100 毫秒
   slowOpSampleRate: <double> # 隨機采集慢查詢的百分比值,sampleRate 值默認為1,表示都采集,0.42 表示采集42%的內容
replication:  # 復制配置,副本集,indexBuildRetry與副本集互斥 Oplog 具體見文章: https://dwz.cn/98tUpUfu
   oplogSizeMB: <int> # Oplog 的最大大小,單位Mb ,
   replSetName: <string> # 副本集名稱
   secondaryIndexPrefetch: <string> # 僅適用於mmapv1 存儲引擎
   enableMajorityReadConcern: <boolean> # 開啟 Majority 讀取,默認為 True.
sharding: # 分片
   clusterRole: <string> # 設置該實例角色,可選值configsvr、shardsvr
   archiveMovedChunks: <boolean>   # 遷移過程塊不保存 從3.2版本開始,默認為 False

示例配置文件

MongoDB 示例 ini 配置文件

github地址 : https://github.com/tobewithyou1996/LinuxGuide/blob/master/MongoDB/mongodb.conf

MongoDB 示例 YAML 配置文件

github地址 : https://github.com/tobewithyou1996/LinuxGuide/blob/master/MongoDB/mongodb.yaml

四、MongoDB 單節點搭建

單節點搭建

cd /tmp && wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.8.tgz
tar -zxf mongodb-linux-x86_64-4.0.8.tgz 
mv  mongodb-linux-x86_64-4.0.8  /opt/mongodb
mkdir  /opt/mongodb/{data,logs}
touch  /opt/mongodb/mongodb.conf
useradd  mongodb 
# 添加配置文件
cat <<EOF  >> /opt/mongodb/mongodb.conf
bind_ip=0.0.0.0
port=27037
unixSocketPrefix=/opt/mongodb
dbpath=/opt/mongodb/data/
logpath=/opt/mongodb/logs/mongodb.log
pidfilepath=/opt/mongodb/logs/mongod.pid
logRotate= reopen
logappend= true
listenBacklog= 128
maxConns= 500
directoryperdb=true
noauth=true
fork=true
journal=true
profile=2
slowms=200
EOF
# 更改 mongodb 的目錄所有者
chown  -R mongodb:mongodb  /opt/mongodb
# 啟動 MongoDB 服務
mongod -f /opt/mongodb/mongodb.conf
# 如果當前登錄的用戶是 root 需要指定用戶 mongodb 啟動。
su - mongodb  -c "/opt/mongodb/bin/mongod -f /opt/mongodb/mongodb.conf"
# 添加環境變量
echo "export PATH=$PATH:/opt/mongodb/bin" >>/etc/profile
source /etc/profile
# 暫停 MongoDB  服務
/opt/mongodb/bin/mongod --shutdown   --dbpath /opt/mongodb/data
#`mongod` 是服務端
#`mongo` 是客戶端連接工具。

配置管理用戶和普通用戶

創建管理員用戶:創建管理員用戶 admin ,密碼 9toc7ttpji8 ,擁有最高級權限。

> use admin
switched to db admin
> db.createUser({ user: "admin", pwd: "9toc7tpji8", roles: [{ role: "root", db: "admin" }] })
Successfully added user: {
	"user" : "admin",
	"roles" : [
		{
			"role" : "root",
			"db" : "admin"
		}
	]
}

創建普通用戶 : 在數據庫 djx, 創建用戶名為 dd ,密碼為 djx@123456,對數據庫 djx 具有讀寫權限的用戶。

> use djx
switched to db djx
> db.createUser({user: "dd",pwd: "djx@123456",roles:[{"role":"readWrite","db":"djx"}]});
Successfully added user: {
	"user" : "dd",
	"roles" : [
		{
			"role" : "readWrite",
			"db" : "djx"
		}
	]
}

詳細配置見本文后半部分的 MongoDB用戶認證和 MongoDB 角色。

開啟登陸驗證

mongodb.conf 文件中的 noauth=true 替換為 auth=true

sed -i s/noauth/auth/g /opt/mongodb/mongodb.conf

並重啟MongoDB 才能生效,我們建議使用 /opt/mongodb/bin/mongod --shutdown --dbpath /opt/mongodb/data 來進行關閉。

配置systemd 腳本

chown  -R mongodb:mongodb  /opt/mongodb 
# 可能我們前面啟動了,目錄文件的所有者不是 mongodb 了。
cat <<EOF >>/usr/lib/systemd/system/mongodb.service
[Unit]
Description= mongodb service manager
[Service]
# Other directives omitted
# (file size)
LimitFSIZE=infinity
# (cpu time)
LimitCPU=infinity
# (virtual memory size)
LimitAS=infinity
# (locked-in-memory size)
LimitMEMLOCK=infinity
# (open files)
LimitNOFILE=64000
# (processes/threads)
LimitNPROC=64000
Type=forking
User=mongodb
Group=mongodb
PIDFile=/opt/mongodb/logs/mongod.pid
ExecStart= /opt/mongodb/bin/mongod -f /opt/mongodb/mongodb.conf
ExecStop= /opt/mongodb/bin/mongod --shutdown   --dbpath /opt/mongodb/data
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl status  mongodb # 查看 mongodb 狀態
systemctl start mongodb # 啟動 mongodb
systemctl enable  mongodb # 將 mongodb 添加到開機自啟
systemctl stop mongodb # 暫停 mongodb 

如果是在生產環境中使用,查看 MongoDB 生產環境筆記

五、MongoDB 連接

MongoDB 默認連接端口 27017 。

MongoDB shell 連接

指定端口:

mongo --port 27037

指定端口和主機

mongo --host mongodb0.example.com:28015

具有認證的 MongoDB 實例

mongo --host mongodb://alice@mongodb0.examples.com:28015/?authSource=admin
或者使用
 --username <user>  --password, --authenticationDatabase <db>

MongoDB 應用程序連接

連接到 MongoDB 的副本集

mongo mongodb://mongodb0.example.com.local:27017,mongodb1.example.com.local:27017,mongodb2.example.com.local:27017/?replicaSet=replA

或者是
mongo --host replA/mongodb0.example.com.local:27017,mongodb1.example.com.local:27017,mongodb2.example.com.local:27017

使用 TLS/SSL 連接

在連接后面加上&ssl = true 即可

MongoDB 設置連接池的連接數

最大連接數 &maxPoolSize=<integer>

mongo "mongodb://root:xxxxxx@dds-bpxxxxxxxx-pub.mongodb.rds.aliyuncs.com:3717,dds-bpxxxxxxxx-pub.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-xxxxxx&maxPoolSize=10"

最小連接數 &minPoolSize=<integer>

六、MongoDB 常用命令

數據庫級別常用命令

db.version() # 查看數據庫版本
db  #查看當前所在的數據庫
db.help() # 幫助
use databasename # 切換數據庫
show dbs  # 列出當前用戶可用的所有數據庫
db.getSiblingDB() #不切換數據庫,在別的數據庫執行程序
db.stats()  # 查看當前所在數據庫的狀態
db.getMongo() # 查看當前 MongoDB 連接路徑
use newdatabasename  # 創建數據庫
db.dropDatabase()#  刪除當前所在數據庫
show profile # 打印最近執行花費1毫秒或更長時間的五個最近的操作。
db.serverStatus().connections #  查詢當前連接數,以及最大連接數。
use admin , db.runCommand({currentOp: 1, $all:[{"active" : true}]}) # 查詢每個連接對應的來源IP地址。
db.currentOp() # 查看 MongoDB 當前正在執行的操作。
db.killOp(opid) # 終止請求執行
db.fsyncLock()# 刷新寫入磁盤並鎖定數據庫
db.fsyncUnlock()# 解鎖
db.serverStatus().storageEngine # 顯示當前 MongoDB 所使用的儲存引擎
db.runCommand( { "connPoolStats" : 1 } ) # 查詢數據庫當前的連接信息
db.runCommand({logRotate:1}) # mongodb 日志切割

集合級別常用命令

show collections #  查看當前數據庫已有的集合
db.createCollection('name')#  創建集合
db.collectionname.drop()# 刪除集合
db.collectionname.dataSize(); # 查詢集合的大小
db.collectionname.find({key:value}) # 查詢集合的數據包含 key 和 value。
db.collectionname.find() # 查詢整個集合,每次只會顯示部分數據,通過輸入 it 來查看其它數據。
db.collectionname.renameCollection("newname")# 集合重命名
db.collectionname.stats()# 查詢集合的狀態

文檔級別常用命令

db.collectionname.insert({key:value})#  添加數據,collectionname指的是集合名稱。
db.collectionname.count() #查詢集合有多少文檔數量
db.collectionname.remove({'key':value}) # 刪除集合collectionname 中 key='key',value=value 的 文檔。

用戶常用命令

show users #  當前數據庫的用戶列表
show roles #  當前數據庫的所有角色列表,包括用戶定義和內置角色。
db.auth('username','pwd') # 登錄驗證
db.changeUserPassword('username', 'password') # 更改用戶密碼
db.createUser() # 創建用戶
db.dropUser(username) # 刪除用戶
db.dropAllUsers() # 刪除所有的用戶
db.getUser(username)  # 查詢用戶
db.getUsers() # 返回當前數據庫所有的用戶
db.removeUser(username) # 刪除用戶
db.grantRolesToUser(username, roles, writeConcern) # 給用戶授權新的權限
db.revokeRolesFromUser() # 刪除用戶授權的權限
db.updateUser() # 更新用戶信息,該方法會替代用戶原有的所有值。

七、MongoDB 認證

MongoDB 默認的認證是 SCRAM

MongoDB 創建用戶命令詳解:

#  創建用戶 
db.createUser(
{
user: "用戶名",
pwd: "密碼",
customData: {  < any  information >  },
roles: [
    { role: "<role>", db: "<database>" } | "<role>",
    ...
  ],
authenticationRestrictions: [
     {
       clientSource: ["<IP>" | "<CIDR range>", ...]
       serverAddress: ["<IP>" | "<CIDR range>", ...]
     },
     ...
  ],
  mechanisms: [ "<SCRAM-SHA-1|SCRAM-SHA-256>", ... ],
  passwordDigestor: "<server|client>"
}
)
字段 數據類型 描述
user string 用戶名
pwd string 密碼
customData document 可選的,任意信息,可以是用戶的id
roles array 授權用戶的角色。可以指定一個空數組[]來創建沒有角色的用戶。
authenticationRestrictions array 可選,3.6版本中的新功能,允許服務器可以接受用戶的IP地址和服務器地址,和CIDR 范圍
mechanisms array 可選的,4.0版本的功能,指定用於創建SCRAM用戶憑據的特定SCRAM機制,可選值為 SCRAM-SHA-1 、SCRAM-SHA-256
passwordDigestor string 可選的,服務端和客戶端是否記錄密碼,默認為 server ,可選 server 、client。

示例:

創建管理員用戶

use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)

創建普通用戶 myTester ,密碼為 xyz123 ,對庫 test 有可讀可寫的權限 和 對庫 reporting 有可讀的權限。

use test
db.createUser(
  {
    user: "myTester",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "test" },
             { role: "read", db: "reporting" } ]
  }
)

擴展

當我們在登錄的時候時候,可能會出現下面的錯誤,原因是我們沒有對用戶名和 密碼打上雙引號,加上雙引號就可以正常登錄了。

> db.auth(admin,9toc7tpji8)
2020-02-23T21:08:22.024+0800 E QUERY    [js] SyntaxError: identifier starts immediately after numeric literal @(shell):1:14
> db.auth('admin',9toc7tpji8)
2020-02-23T21:08:35.968+0800 E QUERY    [js] SyntaxError: identifier starts immediately after numeric literal @(shell):1:16
> db.auth(admin,'9toc7tpji8')
2020-02-23T21:08:48.993+0800 E QUERY    [js] ReferenceError: admin is not defined :
@(shell):1:1

八、MongoDB 用戶角色

官網鏈接

MongoDB 包含以下客戶端的角色 :

基本權限: read(可讀)、readWrite(可讀可寫)。

管理員權限:dbAdmin(管理員)、userAdmin(當前數據庫上創建和修改角色和用戶的功能)、dbOwner (數據庫所有者,包含readWritedbAdminuserAdmin角色)

備份和還原權限:backup(提供備份數據所需要的最小權限)、restore(提供從不包含system.profile 集合數據的備份還原數據所需的權限)

針對所有數據庫的權限:readAnyDatabasereadWriteAnyDatabase、`userAdminAnyDatabaseuserAdminAnyDatabasedbAdminAnyDatabase

超級管理員: root (包含readWriteAnyDatabase, dbAdminAnyDatabase,userAdminAnyDatabase, clusterAdmin,restore,和 backup)

我們也可以定義自己需要的角色,來實現我們特定的權限規則。我們可以創建角色,並賦予其權限,詳細設置見官網。

九、MongoDB 備份與恢復

由於文章篇幅太長,所以單獨放到一個文章里了。

MongoDB 備份與還原 mongodump、mongorestore

十、生產環境注意事項

由於文章篇幅太長,所以單獨放到一個文章里了。

MongoDB 生產環境筆記

十一、MongoDB 調優

MongoDB 日志切割

MongoDB 日志切割三種方式

CPU 占用較高

[MongoDBCPU占用較高(阿里雲)](<https://help.aliyun.com/document_detail/62224.html)

MongoDB 開啟慢查詢

MongoDB調優-查詢優化-MongoDB Profiler

MongoDB Oplog詳解

MongoDB-Oplog詳解

MongoDB 日志清理

  • 用戶禁止使用 db.repairDatabase命令。
  • 日志占用空間過大時,會觸發自動清理策略。

注:緊急情況下請使用 db.runCommand({compact: 'oplog.rs'})命令清理日志。

十二、MongoDB 常用的幾大GUI工具

MongoDB 常用的幾大GUI工具

十三、MongoDB-副本集搭建與管理

MongoDB-副本集搭建與管理


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM