21.26 mongodb介绍
21.27 mongodb安装
21.28 连接mongodb
21.29 mongodb用户管理
21.26 mongodb介绍
之前讲的memcached
redis
都是属于k-v
类型的数据库,而mongodb
是文档型
数据库。一个json就是一个文档
。json类似与一个k-v value里面有多多个数组(k-v对)。关于json http://www.w3school.com.cn/json/index.asp
mongodb官网 www.mongodb.com 当前最新版4.0。它是由C++编写,基于分布式的,属于NoSQL的一种。
在NoSQL中是最像关系型数据库的。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON对象。字段值可以包含其他文档,数组及文档数组。因为基于分布式,所以MongoDB很容易扩展。
MongoDB和关系型数据库对比
总结
可以看出MongoDB中的集合
相当于MySQL中的表
。文档
相当于MySQL中的行
。文档里面的k-y(域)
相当于MySQL中的列(字段)
21.27 MongoDB安装
epel自带的mongodb版本为2.6,我们需要安装4.0版本
可以参考官方安装文档来下载最新版的MongoDB https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/
移动到yum.repos.d目录下
1 | [root@kun03 ~]# cd /etc/yum.repos.d/ |
创建mongodb-org-4.0库
1 | [root@kun03 yum.repos.d]# vim mongodb-org-4.0.repo |
添加下面内容1
2
3
4
5
6[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
可以先看看是否有最新版的源
1 | [root@kun03 yum.repos.d]# yum list |grep mongodb |
yum下载最新的MongoDB
1 | [root@kun03 yum.repos.d]# yum install -y mongodb-org |
21.28 连接mongodb
我们可以查看下mongodb的配置文件1
[root@kun03 ~]# vim /etc/mongod.conf
定义log路径1
2
3
4systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
定义datadir路径1
2
3
4storage:
dbPath: /var/lib/mongo
journal:
enabled: true
定义监听IP和端口 多个IP用,分开1
2
3net:
port: 27017
bindIp: 127.0.0.1,192.168.80.102
启动MongoDB服务
1 | [root@kun03 ~]# systemctl start mongod |
连接MongoDB
格式:mongo [--host IP --port 端口]
警告:1
2
3
4
52018-08-22T23:06:08.210+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2018-08-22T23:06:08.210+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2018-08-22T23:06:08.210+0800 I CONTROL [initandlisten]
2018-08-22T23:06:08.210+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2018-08-22T23:06:08.210+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
解决:1
2
3[root@kun03 ~]# echo never >> /sys/kernel/mm/transparent_hugepage/enabled
[root@kun03 ~]# echo never >> /sys/kernel/mm/transparent_hugepage/defrag
[root@kun03 ~]# systemctl restart mongod
直接敲mongo
1 | [root@kun03 ~]# mongo |
带上IP和端口
1 | [root@kun03 ~]# mongo --host 127.0.0.1 --port 27017 |
21.29 MongoDB用户管理
要创建用户来登录MongoDB,先进入到admin库里再创建新用户
步骤
1.切换到admin库
格式:use admin
1
2> use admin
switched to db admin
2.创建新用户
格式:db.createUser( { user: 用户, pwd: 密码, roles: [ { role: 角色", db: "针对的库" } ] } )
1
2
3
4
5
6
7
8
9
10
11
12
13> db.createUser( { user: "admin", customData: {description: "superuser"}, pwd: "38003800", roles: [ { role: "root", db: "admin" } ] } )
Successfully added user: {
"user" : "admin",
"customData" : {
"description" : "superuser"
},
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
user
指定用户,customData
为说明字段,可以省略,pwd
为密码,roles
指定用户的角色,db指定库名
3.编辑启动脚本
1 | vim /usr/lib/systemd/system/mongod.service |
找到OPTIONS=那行1
Environment="OPTIONS=-f /etc/mongod.conf"
在OPTIONS=添加–auth1
Environment="OPTIONS=--auth -f /etc/mongod.conf"
4.重启服务
1 | [root@kun03 ~]# systemctl daemon-reload |
5.用户验证登录
格式:mongo -u用户名 -p密码 --authenticationDatabase 登录的数据库
1
2
3
4[root@kun03 ~]# mongo -u 'admin' -p '38003800' --authenticationDatabase "admin"
MongoDB shell version v4.0.1
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 4.0.1
列出当前库下所有用户
格式:show users
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19> show users
{
"_id" : "admin.admin",
"user" : "admin",
"db" : "admin",
"customData" : {
"description" : "superuser"
},
"roles" : [
{
"role" : "root",
"db" : "admin"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
列出所有用户,须切换admin库下使用
格式:db.system.users.find()
1
2
3
4
5> use admin ##切换到admin库下
switched to db admin
> db.system.users.find()
{ "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "AH6WtMoX2KTU2+XqkHAUsA==", "storedKey" : "pqgYQv1TAWdqeIcu3NTrTS3TxGw=", "serverKey" : "DjF/zdOrcVwwogJMIRwgdDbyIJY=" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "RNLMzq80VCtbb5AGM2H7X1FP6Wb6HQRYnCHbhQ==", "storedKey" : "ezXm0EB3lmKgCG/5O7U9N9HtC0VyEx5z+2lQVC0yRYs=", "serverKey" : "YZdZ5grEw01W/bA6/mn49rg9g9+YpKCYWquugutB3cs=" } }, "customData" : { "description" : "superuser" }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
删除用户
格式:db.dropUser('用户名')
1
2
3
4
5
6
7
8
9
10
11
12
13> db.createUser({user:"test1",pwd:"38003800",roles:[{role:"read",db:"db1"}]}) ##创建了一个test1针对db1库的新用户
Successfully added user: {
"user" : "test1",
"roles" : [
{
"role" : "read",
"db" : "db1"
}
]
}
> db.dropUser('test1')
true
命令行来验证用户身份
格式:db.auth("用户", "密码")
切换到db1,没有该库会创建
1 | > use db1 |
创建tes1用户 对db1库读写,对db2库只读
1 | > db.createUser( { user: "test1", pwd: "123aaa", roles: [ { role: "readWrite", db: "db1" }, {role: "read", db: "db2" } ] } ) |
验证身份
1 | > db.auth("test1", "123aaa") |
验证身份后test1用户才可以去db2来创建数据
MongoDB用户角色
参数 | 含义 |
---|---|
Read | 允许用户读取指定数据库 |
readWrite | 允许用户读写指定数据库 |
dbAdmin | 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile |
userAdmin | 允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户 |
clusterAdmin | 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限 |
readAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读权限 |
readWriteAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读写权限 |
userAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 |
dbAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限 |
root | 只在admin数据库中可用。超级账号,超级权限 |