說明
MongoDB 3.4 的四個組件說明:
- mongodb-org-server: 包含MongoDB守護進程和相關的配置和初始化腳本。
- mongodb-org-mongos: 包含mongos的守護進程。
- mongodb-org-shell: 包含mongo shell。
- mongodb-org-tools: 包含MongoDB的工具: mongoimport, bsondump, mongodump, mongoexport, mongofiles, mongooplog, mongoperf, mongorestore, mongostat, and mongotop。
安裝
yum安裝
- 創建/etc/yum.repos.d/mongodb-org-3.4.repo文件,內容如下
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
- 安裝
$ yum install -y mongodb-org
配置SELinux
- 如果ELinux啓動了enforcing模式
$ semanage port -a -t mongod_port_t -p tcp 27017
如果禁用SELinux (修改配置文件的方式必須重啓系統)
$ vim /etc/selinux/config
修改配置
SELINUX=disabled
或者
SELINUX=permissive- setenforce,此方法不用重啓系統
$ setenforce 0
- setenforce,此方法不用重啓系統
源碼安裝
- Setp 1 獲取壓縮包
- 我們可以將下載好的壓縮包上傳到服務器
- 或者通過wget獲取壓縮包
此處我們將我們下載好的壓縮包mongodb-linux-x86_64-rhel70-3.4.4.tgz上傳至服務器
- Setp 2 解壓壓縮包
$ tar -zxvf mongodb-linux-x86_64-rhel70-3.4.4.tgz /home
$ cd mongodb-linux-x86_64-rhel70-3.4.4
$ mkdir /home/mongodb
$ cp -R * /home/mongodb
- Setp 3 配置MongoDB
$ mkdir /home/mongodb/data
$ mkdir /home/mongodb/log/mongolog
mongodb配置文件,mongo.cfn。需要注意,配置文件的縮進是空格,使用製表符Tab縮進會報錯
systemLog:
destination: file
path: "/home/mongodb/log/mongolog/mongod.log"
logAppend: true
storage:
journal:
enabled: true
dbPath: /home/mongodb/data
processManagement:
fork: true #後臺進程方式啓動
pidFilePath: "/home/mongodb/data/mongod.pid"
net:
bindIp: 127.0.0.1 #此處修改爲服務器IP,否則本機以外無法訪問
port: 27017
setParameter:
enableLocalhostAuthBypass: false
- Setp 4 環境變量配置
$ vim /etc/profie.d/mongo.sh
編輯mongo.sh文件,添加內容:export PATH=$PATH:/home/mongodb/bin
$ source /etc/profile.d/mongo.sh
- Setp 5 啓動MongoDB
直接命令行配置啓動
$ mongod --dbpath=/home/mongodb/data/ --logpath=/home/mongodb/log/mongolog/mongo.log --logappend --auth --fork
使用配置文件配置啓動
$ mongod -f /home/mongodb/mongo.cfn
啓動
- 執行啓動MongoDB服務的命令
$ service mongod start
停止MongoDB服務:service mongod stop
重啓MongoDB服務:service mongod restart
- 查看MongoDB啓動是否成功,查看日誌/var/log/mongodb/mongod.log文件,是否存在以下一行內容
[initandlisten] waiting for connections on port <port>
爲當前MongoDB服務的端口,默認爲27017。端口可以在/etc/mongod.conf主配置文件中進行配置,只要配置文件修改均需要重啓MongoDB服務方可生效。
- 設置MongoDB服務隨操作系統啓動
$ chkconfig mongod on
維護
- 放行MongoDB端口
$ firewall-cmd --zone=public --add-port=27017/tcp --permanent
$ firewall-cmd --reload
- MongoDB數據庫存放目錄爲/var/lib/mongo
- 刪除MongoDB的安裝包
$ yum erase $(rpm -qa | grep mongodb-org)
- 刪除MongoDB數據庫及日誌
$ rm -r /var/log/mongodb
$ rm -r /var/lib/mongo
Shell 客戶端
登錄Mongo Shell
連接MongoDB
$ mongo --host 192.168.0.100
基本命令
- 查看數據庫
$ show dbs;
- 切換數據庫
在進行任何集合操作前,都必須先切換到一個數據庫
$ use admin;
switched to db admin
- 查看集合
等同於關係型數據庫的表
$ show collections;
system.version
- 退出Shell
$ exit;
權限
說明
MongoDB一路走來,各個版本權限管理差別較大,本文講解的權限是基於v3.4.4版本,如果使用低於或高於本文所用版本,可能存在差異。
權限、用戶、角色管理均基於Shell,所以所有操作均需要保證已登錄Shell客戶端
所有用戶均儲存在admin數據庫下的db.system.users集合
用戶角色權限
數據庫用戶角色
read
僅擁有數據庫讀權限readWrite
數據庫讀寫權限
數據庫管理角色
dbAdmin
可以對數據庫的system.indexes、system.namespaces、system.profile 集合進行操作- collStats
- dbHash
- dbStats
- find
- killCursors
- listIndexes
- listCollections
- dropCollection、createCollection僅提供給system.profile
dbOwner
對數據庫的擁有者、角色提供管理權限,同時提供readWrite、dbAdmin、userAdmin角色的權限userAdmin
當前數據庫(使用use切換的目標數據庫)提供,創建、修改角色及用戶的權限。
明確的提供以下操作:- changeCustomData
- changePassword
- createRole
- createUser
- dropRole
- dropUser
- grantRole
- revokeRole
- viewRole
- viewUser
所有數據庫角色
userAdminAnyDatabase
僅能夠進行本地連接Shell,僅擁有userAdmin角色的權限,沒有readWrite權限dbAdminAnyDatabase
僅能夠進行本地連接Shell,僅擁有dbAdmin角色的權限,沒有readWrite權限readAnyDatabase
僅能夠進行本地連接Shell,僅擁有read權限readWriteAnyDatabase
僅能夠進行本地連接Shell,僅擁有 readWrite權限
超級用戶角色
- root
提供所有角色的操作權限
- root
開啓權限
配置文件/home/mongodb/mongo.cfn中添加一下代碼,開啓權限驗證
security:
authorization: "enabled"
創建超級管理員
首先創建一個超級管理員
> use admin
> db.createUser(
{
user: "admin",
pwd: "admin123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
user:用戶名
pwd:用戶密碼
roles:一組角色設置(對象)
role:角色名
db:角色所控制的數據庫名userAdminAnyDatabase:僅能通過本地連接管理用戶及角色
官方文檔地址:https://docs.mongodb.com/manual/reference/built-in-roles/#userAdminAnyDatabase
超級管理員創建完成後,退出命令行,重啓MongoDB
認證
重啓MongoDB後,進入Shell客戶端,在命令行進行認證
$ mongo --host 192.168.0.100 --port 27017 -u "admin" -p "admin123" --authenticationDatabase "admin"
ationDatabase "admin"
MongoDB shell version v3.4.4
connecting to: mongodb://192.168.0.202:27017/
MongoDB server version: 3.4.4
>
-u:用戶名
-p:密碼
–authenticationDatabase:剛剛創建admin用戶時,role指定userAdminAnyDatabase角色,對應的db指定的數據庫如果直接使用$ mongo –host 192.168.0.100 –port 27017連接Shell客戶端,則需要成功連接後,使用db.auth(“admin”, “admin123”)用戶完成認證
刪除用戶
- 需要在admin數據庫下進行
Shell:
> use admin;
- 刪除所有數據庫中匹配用戶名的用戶(需要root權限)
> db.system.users.remove({user:"admin"});
- 僅會刪除當前數據庫中指定用戶名的用戶(不需要root權限,有當前數據操作權限即可)
> db.dropUser("admin")
修改密碼
- 需要在admin數據庫下進行
Shell:
> use admin;
- 進行密碼修改
> db.updateUser( "root",{pwd:"root123"})
用戶管理相關文檔地址:https://docs.mongodb.com/manual/reference/method/js-user-management/