一、MongoDB 簡介
本文的內容是基於 MongoDB 4.0
的。 參考於 MongoDB 4.0
官方文檔。
MongoDB 是由C++
語言編寫的,是一個基於分布式文件存儲的開源數據庫系統。屬於 nosql
數據庫。MongoDB 數據庫中最小的數據單元是文檔,它是由 key 和 value 組成的數據結構, MongoDB 文檔類似於 JSON 對象。value 的值可以是數組、字符串、數值、文檔。
主要優點
支持多語言、高性能、豐富的查詢語言、高可用性、可擴展、支持多個儲存引擎、高效存儲二進制大對象 (比如照片和視頻)。
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 日志,通過該日志我們可以獲取上一個檢查點之后發生的操作。
使用日志功能,恢復流程:
- 先查看數據文件查找最后一個檢查點的位置的標識符。
- 在日志文件中搜索與檢查點標識符相匹配的記錄。
- 獲取從上一個檢查點之后的操作。
日志文件會在 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 (數據庫所有者,包含readWrite
, dbAdmin
,userAdmin
角色)
備份和還原權限:backup(提供備份數據所需要的最小權限)、restore(提供從不包含system.profile
集合數據的備份還原數據所需的權限)
針對所有數據庫的權限:readAnyDatabase、readWriteAnyDatabase、`userAdminAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase,
超級管理員: root (包含readWriteAnyDatabase, dbAdminAnyDatabase,userAdminAnyDatabase, clusterAdmin,restore,和 backup)
我們也可以定義自己需要的角色,來實現我們特定的權限規則。我們可以創建角色,並賦予其權限,詳細設置見官網。
九、MongoDB 備份與恢復
由於文章篇幅太長,所以單獨放到一個文章里了。
MongoDB 備份與還原 mongodump、mongorestore
十、生產環境注意事項
由於文章篇幅太長,所以單獨放到一個文章里了。
十一、MongoDB 調優
MongoDB 日志切割
CPU 占用較高
[MongoDBCPU占用較高(阿里雲)](<https://help.aliyun.com/document_detail/62224.html)
MongoDB 開啟慢查詢
MongoDB調優-查詢優化-MongoDB Profiler
MongoDB Oplog詳解
MongoDB 日志清理
- 用戶禁止使用
db.repairDatabase
命令。 - 日志占用空間過大時,會觸發自動清理策略。
注:緊急情況下請使用
db.runCommand({compact: 'oplog.rs'})
命令清理日志。