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