mongodb第二阶段:进阶
第一章:数据库安全
用户管理:默认情况下,任何客户端都可以直接访问,没有认证。无管理员账户,服务器开启安全检查后则只有数据库认证的用户才能执行读写操作。
管理员:超级管理员--admin数据库中的用户被视为超级管理员
普通管理员:仅在对应的数据库中才能执行对应的权限操作,由超级管理员创建账户
注意:在服务器开启安全检查之前至少要有一个管理员账号
练习:
>use admin
>db.createUser({user:'root',pwd:'123',roles:[role:'root',db:'admin'}]})
ctl+c关闭服务器,以安全检查的方式打开服务器
>mongod --dbpath 'F:\software\mongoData' --auth
客户端连接服务器需要权限验证,下面的指令必须连接admin库才能成功授权连接到服务器
>db.auth('root','123')
>use test
....读写操作
root用户创建普通用户
>db.createUser({user:'zhangsan',pwd:'123',roles:[role:'read',db:'test'}]})
>db.createUser({user:'lisi',pwd:'123',roles:[role:'readWrite',db:'test'}]})
>db.dropUser('lisi')
>show users
权限以角色的方式赋权:
root ---只在admin数据库中可用
read
readWrite
>db.system.users.find()
第二章:副本集理论和搭建
副本集:一个活跃节点+n个备份节点
作用:数据同步备份
如果活跃节点崩掉,备份节点会自动将其中一个升级为活跃节点
mongodb复制原理:
主节点记录在其上的所有操作oplog,备份节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证备份节点的数据与主节点一致。
如图所示:客户端从主节点上读写数据,在客户端写入数据到主节点时,该主节点与备份节点进行数据交互保障数据一致性
实践操作:
配置并启动副本集
1、启动三个mongodb服务,指定所属副本集replication set(F盘创建对应的数据文件夹)
mongod --port 27017 --dbpath "F:\software\mongoData" --replSet rs0
mongod --port 27018 --dbpath "F:\software\mongoData1" --replSet rs0
mongod --port 27019 --dbpath "F:\software\mongoData2" --replSet rs0
2、初始化副本集
登录任意一个mongodb服务节点的客户端,设置副本集的配置并初始化副本集
replSet_config={
_id:'rs0',
members:[
{_id:0,host:'127.0.0.1:27017'},
{_id:1,host:'127.0.0.1:27018'},
{_id:2,host:'127.0.0.1:27019'}
]
};
rs.initiate(replSet_config)
rs.add("127.0.0.1:27020") //后增加节点
rs.remove("127.0.0.1:27020")//在主节点上执行减少节点操作
3、客户端操作副本集
rs.status() 查看集群状态
rs.isMaster() 查看角色信息
4、验证数据同步备份
27017节点上插入数据(假设该节点为主节点),备份节点通过rs.slaveOk()命令开启查询权限后可以看到同步数据
for(i=1;i<500;i++){
db.person.insert({name:'name'+i,age:i})
}
5、关闭主节点---备用点自动转换成主节点
use admin
db.shutdownServer()
rs.config() 查看配置信息
集群搭建过程中遇到的问题:
mongodb6.0 建集群会报下面的错误,更换3.4版本就能正常起服务器
操作环境、软件版本等信息
win10
运行结果及报错内容
重复报错的内容如下
{"t":{"$date":"2021-12-14T15:1