81.mongodb介紹 安裝 鏈接 用戶管理

21.26 mongodb介紹mysql

21.27 mongodb安裝linux

21.28 鏈接mongodbredis

21.29 mongodb用戶管理sql

 

 

 

21.26 mongodb介紹mongodb

 

 

mongodb屬於文檔型數據庫。說道文檔就要聯想到JSONshell

文檔其實也就是不少個key-value在一塊兒,和關係型數據庫相比就是很簡單的數據結構數據庫

1.官網www.mongodb.com, 當前最新版3.4json

很是的穩定和靈活,查詢速度會很是快vim

2.C++編寫,基於分佈式的,屬於NoSQL的一種數組

3.在NoSQL中是最像關係型數據庫的

好比mysql查詢一個訂單,就是不少個表交叉的去查詢,而redis不行。可是mongodb能夠

4.MongoDB 將數據存儲爲一個文檔(也就是一個JSON語句),數據結構由鍵值(key=>value)對組成。MongoDB 文檔相似於 JSON 對象。字段值能夠包含其餘文檔、數組及文檔數組。

5.關於JSON http://www.w3school.com.cn/json/index.asp,

JSON:JavaScript 對象表示法(JavaScript Object Notation)。

JSON 是存儲和交換文本信息的語法。相似 XML。

JSON 比 XML 更小、更快,更易解析。

舉例:(這就是一個文檔,一個JSON)

{ "employees": [ { "firstName":"Bill" , "lastName":"Gates" }, { "firstName":"George" , "lastName":"Bush" }, { "firstName":"Thomas" , "lastName":"Carter" } ] }

大致能夠看爲一個KEY(employees),一個value(方括號裏面的內容)。而這個value裏面又包含了多個這種的片斷。好比第一行,他左邊(fireName)又爲一個key,右邊(Bill)又爲一個value,同時後面又是一個key和value。也就是這裏面同時包含了多個key-value對。那麼,像這種就是一個JSON,一個JSON就是一個文檔。mongodb存的數據就是這種類型的數據

6.由於基於分佈式,因此很容易擴展

 

MongoDB和關係型數據庫對比

關係型數據庫數據結構

 

 

總結(mongodb的特色):文檔數據庫(JSON)、分佈式的(支持橫向擴展,很容易)

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

21.27 mongodb安裝

 

 

1.epel自帶的mongodb版本爲2.6,咱們須要安裝3.4版本

2.官方安裝文檔https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/ #如下步驟也是參考的官方文檔。其實也就是建立一個官方提供的yum源,yum安裝就好了

3.cd /etc/yum.repos.d/

4.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

5.yum list |grep mongodb //能夠看到mongodb相關的rpm包

6.yum install -y mongodb-org

 

 

實例:

[root@axinlinux-01 ~]# cd /etc/yum.repos.d/ #首先要進入到yum.repos.d目錄下

[root@axinlinux-01 yum.repos.d]# vim mongo.repo #vim一個mongo.rpeo文件

[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

[root@axinlinux-01 yum.repos.d]# yum list |grep mongodb #而後能夠yum list看到這五個,等下yum安裝的時候,也就是安裝的這五個

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

[root@axinlinux-01 yum.repos.d]# yum install -y mongodb-org #漫長的等待--

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

21.28 鏈接mongodb

 

 

1.systemctl start mongod //啓動服務 #注意是mongod

2.在本機能夠直接運行命令mongo進入到mongodb shell中

3.若是mongodb監聽端口並非默認的27017,則在鏈接的時候須要加--port 選項,例如

mongo --port 27018

4.鏈接遠程mongodb,須要加--host,例如

mongo --host 127.0.0.1

5.若是設置了驗證,則在鏈接的時候須要帶用戶名和密碼

mongo -uusername -ppasswd --authenticationDatabase db //這個和MySQL挺像

#-u用戶、-p密碼、--authenticationDatabase db(db爲你加密的數據庫)

 

 

實例:

[root@axinlinux-01 yum.repos.d]# vim /etc/mongod.conf #先來看一下配置文件

systemLog:

destination: file

logAppend: true

path: /var/log/mongodb/mongod.log #定義日誌的

 

storage:

dbPath: /var/lib/mongo #相似於mysql的datadir

journal:

enabled: true

 

processManagement:

fork: true # fork and run in background

pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile #pid

# network interfaces

net: #監聽的端口及綁定的ip

port: 27017

bindIp: 127.0.0.1,192.168.208.128 # Listen to local interface only, comment to listen on all interfaces. #監聽的ip能夠寫多個,用逗號分隔

[root@axinlinux-01 yum.repos.d]# systemctl start mongod #啓動,注意是mongod

[root@axinlinux-01 yum.repos.d]# netstat -lntp |grep mongod

tcp 0 0 192.168.208.128:27017 0.0.0.0:* LISTEN 2693/mongod #端口爲27017

tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 2693/mongod

[root@axinlinux-01 yum.repos.d]# mongo #在本機mongo能夠直接進來

。。。。

Ctrl+d退出

[root@axinlinux-01 yum.repos.d]# mongo --host 192.168.208.128 --port 27017 #指定ip和端口

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

21.29 mongodb用戶管理

 

 

 

1.use admin//須要切換到admin庫

2.db.createUser( { user: "admin", customData: {description: "superuser"}, pwd: "admin122", roles: [ { role: "root", db: "admin" } ] } ) #建立一個用戶

user指定用戶,customData爲說明字段,能夠省略,pwd爲密碼,roles指定用戶的角色,db指定庫名

3.db.system.users.find() //列出全部用戶,須要切換到admin庫

4.show users //查看當前庫下全部的用戶

5.db.dropUser('admin') //刪除用戶

6.若要用建立的用戶和密碼登陸mongodb(生效),還須要編輯啓動腳本

vim /usr/lib/systemd/system/mongod.service,在OPTIONS=後面增--auth

重啓服務systemctl restart mongod

mongo -u "admin" -p "admin122" --authenticationDatabase "admin"

#建立用戶的時候必需要針對一個庫,並且登陸的時候也要針對這個庫去作認證

7.use db1 #針對db1這個庫去建立用戶,同樣要進入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庫進行身份驗證,直接訪問會提示驗證失敗。

8.use db1 #在db1裏受權才能夠

db.auth("test1", "123aaa") #直接在mongodb裏,用命令行受權(用戶名,密碼)

 

MongoDB用戶角色(roles時指定的角色(或叫權限吧)

Read:容許用戶讀取指定數據庫

readWrite:容許用戶讀寫指定數據庫

dbAdmin:容許用戶在指定數據庫中執行管理函數,如索引建立、刪除,查看統計或訪問system.profile

userAdmin:容許用戶向system.users集合寫入,能夠找指定數據庫裏建立、刪除和管理用戶

clusterAdmin:只在admin數據庫中可用,賦予用戶全部分片和複製集相關函數的管理權限。

readAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的讀權限

readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的讀寫權限

userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的userAdmin權限

dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的dbAdmin權限。

root:只在admin數據庫中可用。超級帳號,超級權限

 

 

實例:

1.

> use admin

switched to db admin

2.

> db.createUser( { user: "admin", customData: {description: "superuser"}, pwd: "admin122", roles: [ { role: "root", db: "admin" } ] } )

Successfully added user: {

"user" : "admin",

"customData" : {

"description" : "superuser"

},

"roles" : [

{

"role" : "root",

"db" : "admin"

}

]

}

3.

> db.system.users.find()

{ "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "mltRQCPHnmDXCFkAXt8azg==", "storedKey" : "swemuRJYBzpQzxiEC7z/50+The4=", "serverKey" : "mkZY5906BQIFCmql6ywB3UpyZT8=" } }, "customData" : { "description" : "superuser" }, "roles" : [ { "role" : "root", "db" : "admin" } ] }

4.

> show users

{

"_id" : "admin.admin",

"user" : "admin",

"db" : "admin",

"customData" : {

"description" : "superuser"

},

"roles" : [

{

"role" : "root",

"db" : "admin"

}

]

}

5.

> db.createUser({user:"axin",pwd:"123aaa",roles:[{role:"read",db:"testdb"}]}) #先建立一個用戶

Successfully added user: {

"user" : "axin",

"roles" : [

{

"role" : "read",

"db" : "testdb"

}

]

}

> show users #建立axin以後,再查看一下。下面就是axin用戶

{

"_id" : "admin.admin",

"user" : "admin",

"db" : "admin",

"customData" : {

"description" : "superuser"

},

"roles" : [

{

"role" : "root",

"db" : "admin"

}

]

}

{

"_id" : "admin.axin",

"user" : "axin",

"db" : "admin",

"roles" : [

{

"role" : "read",

"db" : "testdb"

}

]

}

> use testdb #咱們切換testdb庫,若是不存在就會被建立,而且進入

switched to db testdb

> show users #這個時候不管咱們show users仍是db.system.users.find()都查不到,由於要切換到admin庫下

> db.system.users.find()

> use admin

switched to db admin

> show users #切換到admin下才能夠查看用戶

{

"_id" : "admin.admin",

"user" : "admin",

"db" : "admin",

"customData" : {

"description" : "superuser"

},

"roles" : [

{

"role" : "root",

"db" : "admin"

}

]

}

{

"_id" : "admin.axin",

"user" : "axin",

"db" : "admin",

"roles" : [

{

"role" : "read",

"db" : "testdb"

}

]

}

> db.system.users.find() #切換到admin庫下就能夠了

{ "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "mltRQCPHnmDXCFkAXt8azg==", "storedKey" : "swemuRJYBzpQzxiEC7z/50+The4=", "serverKey" : "mkZY5906BQIFCmql6ywB3UpyZT8=" } }, "customData" : { "description" : "superuser" }, "roles" : [ { "role" : "root", "db" : "admin" } ] }

{ "_id" : "admin.axin", "user" : "axin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "PA8GrBDY4ytmQLL1uJoLeg==", "storedKey" : "ScfoJ+6rVtHm7HDwZRwzVRk0yqY=", "serverKey" : "D3jNPKu6Ak5tVlR28CgiGU4y0pQ=" } }, "roles" : [ { "role" : "read", "db" : "testdb" } ] }

6.

[root@axinlinux-01 ~]# vim /usr/lib/systemd/system/mongod.service

[Service]

User=mongod

Group=mongod

Environment="OPTIONS=--auth -f /etc/mongod.conf" #在「OPTIONS=後面加上--auth

[root@axinlinux-01 ~]# systemctl restart mongod #由於咱們改了腳本因此要先reload一下

Warning: mongod.service changed on disk. Run 'systemctl daemon-reload' to reload units.

[root@axinlinux-01 ~]# systemctl daemon-reload

[root@axinlinux-01 ~]# systemctl restart mongod

[root@axinlinux-01 ~]# ps aux |grep mongod #咱們看這個啓動的命令多了--auth。只有加了--auth才能用新建的用戶名和密碼登陸

mongod 2358 4.2 2.0 972816 38316 ? Sl 22:46 0:02 /usr/bin/mongod --auth -f /etc/mongod.conf

[root@axinlinux-01 ~]# mongo -host 127.0.0.1 -port 27017 #咱們再來來登陸

MongoDB shell version v3.4.18

connecting to: mongodb://127.0.0.1:27017/

MongoDB server version: 3.4.18

> show users #會有error,就是由於沒有受權

2018-11-16T22:50:07.055+0800 E QUERY [thread1] Error: not authorized on test to execute command { usersInfo: 1.0 } :

[root@axinlinux-01 ~]# mongo -u "admin" -p "admin122" --authenticationDatabase "admin" #受權,登陸

> use admin

switched to db admin

> show users #就能夠查看了

{

"_id" : "admin.admin",

"user" : "admin",

"db" : "admin",

"customData" : {

"description" : "superuser"

},

"roles" : [

{

"role" : "root",

"db" : "admin"

}

]

}

{

"_id" : "admin.axin",

"user" : "axin",

"db" : "admin",

"roles" : [

{

"role" : "read",

"db" : "testdb"

}

]

}

7.

> db.createUser( { user: "test1", pwd: "123aaa", roles: [ { role: "readWrite", db: "db1" }, {role: "read", db: "db2" } ] } ) #建立test1用戶。針對db1角色是讀寫。針對db2角色是隻讀

Successfully added user: {

"user" : "test1",

"roles" : [

{

"role" : "readWrite",

"db" : "db1"

},

{

"role" : "read",

"db" : "db2"

}

]

}

> show users #咱們在這個db1庫裏是能夠直接show users的

{

"_id" : "db1.test1",

"user" : "test1",

"db" : "db1",

"roles" : [

{

"role" : "readWrite",

"db" : "db1"

},

{

"role" : "read",

"db" : "db2"

}

]

}

8.

> use db1 #可是咱們還要給他受權。必定要在db1裏受權

switched to db db1

> db.auth("test1","123aaa") #在mongodb命令行裏直接受權就能夠了,用這個命令

1

相關文章
相關標籤/搜索