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