81.mongodb介绍 安装 连接 用户管理

21.26 mongodb介绍

21.27 mongodb安装

21.28 连接mongodb

21.29 mongodb用户管理

 

 

 

21.26 mongodb介绍

 

 

mongodb属于文档型数据库。说道文档就要联想到JSON

文档其实也就是很多个key-value在一起,和关系型数据库相比就是很简单的数据结构

1.官网www.mongodb.com, 当前最新版3.4

非常的稳定和灵活,查询速度会非常快

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

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/3866149/blog/3030828

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值