mongodb用户基本创建、修改与主从复制

用户管理

  • MongoDB是没有默认管理员账号,所以要先添加管理员账号,再开启权限认证。
  • 切换到admin数据库,添加的账号才是管理员账号。
  • 用户只能在用户所在数据库登录,包括管理员账号。
  • 管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以。

角色分类


角色分类角色名称
数据库用户角色read、readWrite
数据库管理角色dbAdmin、dbOwner、userAdmin
集群管理角色clusterAdmin、clusterManager clusterMonitor、hostManager
备份恢复角色backup、restore
所有数据库角色readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超级用户角色root,这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
内部角色__system

角色说明


角色名称权限作用
Read允许用户读取指定数据库
readWrite允许用户读写指定数据库
dbAdmin允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限
readAnyDatabase只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabas只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限
root只在admin数据库中可用。超级账号,超级权限

添加用户

  • 添加普通管理员用户
    注释:没有添加用户的权限,user:是用户名,pwd:密码,roles:添加角色,customData:注释可以不写
db.createUser(
   {
     user: "root",
     pwd: "123456",
     customData:{description:"superuser"},
     roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
   }
)
  • 添加超级管理员
    注释:有添加用户的权限,在admin下
db.createUser(
    {
        user:"root",
        pwd:"123456",
        roles:["root"]
    }
)
  • 数据库管理员用户
db.createUser({
    user:"test1",
    pwd:"123456",
    customData:{
        name:'jim',
        email:'jim@qq.com',
        age:18,
    },
    roles:[
        {role:"readWrite",db:"mydb1"},   //给mydb1读写权限
        {role:"readWrite",db:"mydb2"},
        'read'
    ]
})
  • 启用密码验证
vi /etc/mongod.conf

security:
  authorization: enabled

查看用户

show users
db.system.users.find()
db.runCommand({usersInfo:"userName"})   //userName是你的数据库名

修改用户

  • 修改用户密码
db.changeUserPassword("root", "123qwe")   //修改当前数据库用户密码
  • 修改用户密码和信息
db.runCommand(
    {
        updateUser:"root",
        pwd:"123456",
        customData:{title:"super"}
    }
)

删除用户

db.system.users.deleteOne({user:"test1"})

数据复制

mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。mongodb各个节点常见的搭配方式为:一主一从、一主多从。主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。

数据复制的作用

  • 保障数据的安全性
  • 数据高可用性
  • 灾难恢复
  • 无需停机维护(如备份,重建索引,压缩)
  • 分布式读取数据

数据复制的特性

  • N个节点的集群
  • 任何节点可作为主节点
  • 所有写入操作都在主节点上
  • 自动故障转移
  • 自动恢复

创建数据存放目录

mkdir -p /data/{mongo1,mongo2,mongo3}/{data,log}

启动数据库实例

mongod --dbpath /data/mongo1/data --port 10001 --replSet test --nojournal --fork --logpath /data/mongo1/log/mongo1.log
mongod --dbpath /data/mongo2/data --port 10002 --replSet test --nojournal --fork --logpath /data/mongo2/log/mongo2.log
mongod --dbpath /data/mongo3/data --port 10003 --replSet test --nojournal --fork --logpath /data/mongo1/log/mongo3.log

连接数据库

mongo 127.0.0.1:10001

初始化数据库

rs.initiate({_id:"test",members:[
{_id:1,host:"127.0.0.1:10001"},
{_id:2,host:"127.0.0.1:10002"},
{_id:3,host:"127.0.0.1:10003"},
]})

查询状态

rs.status()

数据测试

创建数据

use mydb

db.myset.insertOne({
    name:"zhangsan", 
    age:18,
    sex:0
})
  • 从节点读取
mongo 127.0.0.1:10002 

rs.slaveOk()

use mydb

db.myset.find().pretty()
  • 移除复制节点
    注释:主(test:PRIMARY>)删从(test:SECONDARY>)
rs.remove('127.0.0.1:10001')   

自动故障转移

mongo 127.0.0.1:10001     //连接主数据库
use admin          //切换用户
db.shutdownServer()   //关闭数据库
exit                    //‘退出
mongo 127.0.0.1:10002      //连接数据库
rs.status()      //查询状态
  • 重新启动数据库
mongod --dbpath /data/mongo1/data --port 10001 --replSet test --nojournal --fork --logpath /data/mongo1/log/mongo1.log       //查看是主是从
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值