21.26 mongodb介紹、 mongodb安裝、連線mongodb、mongodb使用者管理
21.26 mongodb介紹
l官網www.mongodb.com, 當前最新版3.4
lC++編寫,基於分散式的,屬於NoSQL的一種
l在NoSQL中是最像關係型資料庫的
lMongoDB 將資料儲存為一個文件,資料結構由鍵值(key=>value)對組成。MongoDB 文件類似於 JSON 物件。欄位值可以包含其他文件、陣列及文件陣列。
l關於JSON http://www.w3school.com.cn/json/index.asp
l因為基於分散式,所以很容易擴充套件
epel自帶的mongodb版本為2.6,我們需要安裝3.4版本
官方安裝文件https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/
cd /etc/yum.repos.d/
vim 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 [[email protected] ~]# yum list |grep mongodb [[email protected] ~]# cd /etc/yum.repos.d/ [[email protected] yum.repos.d]# vim mongodb-org-3.4.repo [[email protected] yum.repos.d]# yum list |grep mongodb//可以看到mongodb相關的rpm包 http://fedora.cs.nctu.edu.tw/epel/7/x86_64/repodata/c1ddcd6a3c6455e6d367639727ce3a67c45f2f91ae8621563d174d8a722eaf31-primary.xml.gz: [Errno 14] HTTP Error 404 - Not Found 正在嘗試其它映象。 To address this issue please refer to the below wiki article https://wiki.centos.org/yum-errors If above article doesn't help to resolve this issue please use https://bugs.centos.org/. http://my.fedora.ipserverone.com/epel/7/x86_64/repodata/de34af7e1d9f800981fa2af3a2cd888a3397d80ab50da8b91a4acee99512cdb7-updateinfo.xml.bz2: [Errno 14] HTTP Error 404 - Not Found 正在嘗試其它映象。 collectd-write_mongodb.x86_64 5.8.1-1.el7 epel mongodb.x86_64 2.6.12-6.el7 epel mongodb-org.x86_64 3.4.18-1.el7 mongodb-org-3.4 mongodb-org-mongos.x86_64 3.4.18-1.el7 mongodb-org-3.4 mongodb-org-server.x86_64 3.4.18-1.el7 mongodb-org-3.4 mongodb-org-shell.x86_64 3.4.18-1.el7 mongodb-org-3.4 mongodb-org-tools.x86_64 3.4.18-1.el7 mongodb-org-3.4 mongodb-server.x86_64 2.6.12-6.el7 epel mongodb-test.x86_64 2.6.12-6.el7 epel nodejs-mongodb.noarch 1.4.7-1.el7 epel php-mongodb.noarch 1.0.4-1.el7 epel php-pecl-mongodb.x86_64 1.1.10-1.el7 epel poco-mongodb.x86_64 1.6.1-3.el7 epel syslog-ng-mongodb.x86_64 3.5.6-3.el7 epel [[email protected] yum.repos.d]# yum install -y mongodb-org [email protected] yum.repos.d]# yum install -y mongodb-org 已載入外掛:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * epel: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirror.bit.edu.cn 正在解決依賴關係 --> 正在檢查事務 ---> 軟體包 mongodb-org.x86_64.0.3.4.18-1.el7 將被 安裝 --> 正在處理依賴關係 mongodb-org-tools = 3.4.18,它被軟體包 mongodb-org-3.4.18-1.el7.x86_64 需要 --> 正在處理依賴關係 mongodb-org-shell = 3.4.18,它被軟體包 mongodb-org-3.4.18-1.el7.x86_64 需要 --> 正在處理依賴關係 mongodb-org-server = 3.4.18,它被軟體包 mongodb-org-3.4.18-1.el7.x86_64 需要 --> 正在處理依賴關係 mongodb-org-mongos = 3.4.18,它被軟體包 mongodb-org-3.4.18-1.el7.x86_64 需要 --> 正在檢查事務 ---> 軟體包 mongodb-org-mongos.x86_64.0.3.4.18-1.el7 將被 安裝 ---> 軟體包 mongodb-org-server.x86_64.0.3.4.18-1.el7 將被 安裝 ---> 軟體包 mongodb-org-shell.x86_64.0.3.4.18-1.el7 將被 安裝 ---> 軟體包 mongodb-org-tools.x86_64.0.3.4.18-1.el7 將被 安裝 已安裝: mongodb-org.x86_64 0:3.4.18-1.el7 作為依賴被安裝: mongodb-org-mongos.x86_64 0:3.4.18-1.el7 mongodb-org-server.x86_64 0:3.4.18-1.el7 mongodb-org-shell.x86_64 0:3.4.18-1.el7 mongodb-org-tools.x86_64 0:3.4.18-1.el7 完畢!
21.28 連線mongodb
systemctl start mongod //啟動服務
[[email protected] yum.repos.d]# systemctl start mongod
在本機可以直接執行命令mongo進入到mongodb shell中
MongoDB shell version v3.4.18 connecting to: mongodb://127.0.0.1:27017 MongoDB server version: 3.4.18 Welcome to the MongoDB shell. For interactive help, type "help". For more comprehensive documentation, see http://docs.mongodb.org/ Questions? Try the support group http://groups.google.com/group/mongodb-user Server has startup warnings: 2018-11-19T16:58:05.058+0800 I CONTROL [initandlisten] 2018-11-19T16:58:05.058+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database. 2018-11-19T16:58:05.058+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted. 2018-11-19T16:58:05.058+0800 I CONTROL [initandlisten] 2018-11-19T16:58:05.058+0800 I CONTROL [initandlisten] 2018-11-19T16:58:05.058+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. 2018-11-19T16:58:05.058+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never' 2018-11-19T16:58:05.058+0800 I CONTROL [initandlisten] >
如果mongodb監聽埠並不是預設的27017,則在連線的時候需要加--port 選項,例如
mongo --port 27018
連線遠端mongodb,需要加--host,例如
mongo --host 127.0.0.1
如果設定了驗證,則在連線的時候需要帶使用者名稱和密碼
mongo -uusername -ppasswd --authenticationDatabase db //這個和MySQL挺像
指定ip和埠
21.29 mongodb使用者管理
use admin//需要切換到admin庫
db.createUser( { user: "admin", customData: {description: "superuser"}, pwd: "admin122", roles: [ { role: "root", db: "admin" } ] } )
user指定使用者,customData為說明欄位,可以省略,pwd為密碼,roles指定使用者的角色,db指定庫名
use admin //切換到admin庫
db.system.users.find() //列出所有使用者,需要切換到admin庫
show users //檢視當前庫下所有的使用者
db.dropUser('admin') //刪除使用者
若要使用者生效,還需要編輯啟動指令碼vim /usr/lib/systemd/system/mongod.service,在OPTIONS=後面增--auth
重啟服務systemctl restart mongod
mongo -u "admin" -p "admin122" --authenticationDatabase "admin"
use db1
db.createUser( { user: "test1", pwd: "123aaa", roles: [ { role: "readWrite", db: "db1" }, {role: "read", db: "db2" } ] } )
test1使用者對db1庫讀寫,對db2庫只讀。
之所以先use db1,表示使用者在 db1 庫中建立,就一定要db1庫驗證身份,即使用者的資訊跟隨隨資料庫。比如上述 test1雖然有 db2 庫的讀取許可權,但是一定要先在db1庫進行身份驗證,直接訪問會提示驗證失敗。
use db2
db.auth("test1", "123aaa")
使用者角色:
Read:允許使用者讀取指定資料庫
readWrite:允許使用者讀寫指定資料庫
dbAdmin:允許使用者在指定資料庫中執行管理函式,如索引建立、刪除,檢視統計或訪問system.profile
userAdmin:允許使用者向system.users集合寫入,可以找指定資料庫裡建立、刪除和管理使用者
clusterAdmin:只在admin資料庫中可用,賦予使用者所有分片和複製集相關函式的管理許可權。
readAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的讀許可權
readWriteAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的讀寫許可權
userAdminAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的userAdmin許可權
dbAdminAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的dbAdmin許可權。
root:只在admin資料庫中可用。超級賬號,超級許可權
db.version() //檢視版本
use userdb //如果庫存在就切換,不存在就建立
show dbs //檢視庫,此時userdb並沒有出現,這是因為該庫是空的,還沒有任何集合,只需要建立一個集合就能看到了
db.createCollection('clo1') //建立集合clo1,在當前庫下面建立
db.dropDatabase() //刪除當前庫,要想刪除某個庫,必須切換到那個庫下
db.stats() //檢視當前庫的資訊
db.serverStatus() //檢視mongodb伺服器的狀態