MongoDB用户管理和复制组

news2025/4/19 16:23:51

用户管理

1、建用户时,use到的库就是此用户的验证库

2、登录时必须明确指定验证库才能登录

3、通常管理员用的验证库是admin,普通用户的验证库一般是所管理的库设置为验证库

4、如果直接登录到数据库,不进行use(示例),默认的验证库是test,不是我们生产建议的

注意:

验证库,建立用户时use到的库,在使用用户时,要加上验证库才能登陆。对于管理员用户,必须在admin下创建。

建立用户语法:

db.createUser

{

    user: "<name>",

    pwd: "<cleartext password>",

    roles: [

       { role: "<role>",

     db: "<database>" } | "<role>",

    ...

    ]

}

语法说明:

user:用户名

pwd:密码

roles:

    role:角色名

    db:作用对象(数据库)

role:root, readWrite,read

实验环境

上一章的基础上

用户管理例子

系统库介绍:

admin:管理

config:  配置

local:本地消息

1、创建超级管理员,管理所有数据库(必须use admin再去创建

use admin

db.createUser(

{

user: "root",

pwd: "root123",

roles: [ { role: "root",db: "admin" } ]

}

)

验证用户:

mongo -uroot -proot123 192.168.8.5/admin

db

启用身份验证,这样可以限制对数据库的访问,只有经过认证的用户才能进行相应的操作。

修改配置文件

vim /mongodb/conf/mongodb.conf

添加:

security:

   authorization: enabled

重启mongodb

mongod -f /mongodb/conf/mongodb.conf --shutdown

mongod -f /mongodb/conf/mongodb.conf

登录验证:

mongo -uroot -proot123 admin

mongo -uroot -proot123 192.168.8.5/admin

mongo

use admin

db.auth('root','root123')

查看用户:

use admin

db.system.users.find().pretty()

.pretty()方法确保输出结果以易于阅读的格式展示,每个字段都会在新的一行显示,提高可读性。

2、创建库管理用户(针对某个库

mongo -uroot -proot123 admin

use app

db.createUser(

{

user: "adminapp",

pwd: "app123",

roles: [ { role: "dbAdmin", db: "app" } ]

}

)

登录adminapp用户测试:

mongo -uadminapp -papp123 192.168.8.5/app

db

show dbs

db.createCollection('a')

db.createCollection('b')

db.haha.insert({id : "1021" ,name : "zhssn" ,age : "22" ,gender : "female",address : "sz"})

dbAdmin角色权限很低,能建表,也能删表,不能增删改查。

3、创建对app数据库,读、写权限的用户app01

1)超级管理员用户登陆

mongo -uroot -proot123 admin

2)进入app库

use app

3)创建用户app01

db.createUser(

{

user: "app01",

pwd: "app01",

roles: [ { role: "readWrite" , db: "app" } ]

}

)

4)登录app01用户测试

mongo -uapp01 -papp01 192.168.8.5/app

查看数据库

db

往haha表中添加数据

db.haha.insert({id : "101" ,name : "zhangsan" ,age : "18" ,gender : "male"})

查看所有表

show tables

4、创建对app数据库读写权限和对test数据库具有读权限的用户app03

创建对app数据库读权限的用户app02

mongo -uroot -proot123 192.168.8.5/admin

use app

db.createUser(

{

user: "app03",

pwd: "app03",

roles: [ { role: "readWrite", db: "app" },

{ role: "read", db: "test" }]

}

)

db.createUser(

{

user: "app02",

pwd: "app02",

roles: [ { role: "read", db: "app"  }]

}

)

测试app03用户:

mongo -uapp03 -papp03 192.168.8.5/app

查看log表中数据

db.log.find()

往haha表中添加数据

db.haha.insert({id : "103" ,name : "zhangsan" ,age : "18" ,gender : "male"})

测试app02用户:

mongo -uapp02 -papp02 192.168.8.5/app

查看所有表

show tables

查看log表中数据

db.log.find()

删除log表

db.log.drop()

只有读权限,无法删除表操作

5、查询mongodb中的用户信息

mongo -uroot -proot123 192.168.8.5/admin

db.system.users.find().pretty()

6、删除用户

root用户登录并切换到对用户授权库

mongo -uroot -proot123 192.168.8.5/admin

use app

db.dropUser('app02')

查看所有用户

use admin

db.system.users.find().pretty()

没有app02用户,删除成功

MongoDB复制集RS(ReplicationSet)

  • 基本原理

Primary 节点将数据修改操作记录到本地的 oplog(操作日志,在 local 库下)中,Secondary 节点定期到 Primary 节点获取这些操作(日志),然后对自己的数据副本执行这些操作,从而保证 Secondary 与 Primary 数据一致。

在 MongoDB 副本集中,Secondary 会不间断的通过心跳来探测 Primary 是否正常,当 Primary 不可用时,各 Secondary 之间会触发选举操作,通过优先级来选举出一个 Secondary 做为新的 Primary,这个过程是无需人工干预的

基本构成是1主2从的结构,自带互相监控投票机制(Raft(MongoDB)  Paxos(mysql MGR 用的是变种))

如果发生主库宕机,复制集内部会进行投票选举,选择一个新的主库替代原有主库对外提供服务。同时复制集会自动通知客户端程序,主库已经发生切换了。应用就会连接到新的主库。

  • 副本集特性
  1. 多个 MongoDB 实例建立的集群
  2. 任何节点都可以作为 Primary
  3. 所有写操作都走 Primary
  4. 自动故障转移
  5. 自动恢复

Replication Set配置过程详解

三个以上的mongodb节点(或多实例)

1、创建多实例mongodb目录

su - mongod

mkdir -p /mongodb/280{17..20}/{conf,data,log}

2、创建配置文件

cat > /mongodb/28017/conf/mongod.conf <<EOF

systemLog:

  destination: file

  path: /mongodb/28017/log/mongodb.log

  logAppend: true

storage:

  journal:

    enabled: true

  dbPath: /mongodb/28017/data

  directoryPerDB: true

  #engine: wiredTiger

  wiredTiger:

    engineConfig:

      cacheSizeGB: 1

      directoryForIndexes: true

    collectionConfig:

      blockCompressor: zlib

    indexConfig:

      prefixCompression: true

processManagement:

  fork: true

net:

  bindIp: 192.168.8.5,127.0.0.1

  port: 28017

replication:

  oplogSizeMB: 2048

  replSetName: my_repl

EOF

cp  /mongodb/28017/conf/mongod.conf  /mongodb/28018/conf/

cp  /mongodb/28017/conf/mongod.conf  /mongodb/28019/conf/

cp  /mongodb/28017/conf/mongod.conf  /mongodb/28020/conf/

sed 's#28017#28018#g' /mongodb/28018/conf/mongod.conf -i

sed 's#28017#28019#g' /mongodb/28019/conf/mongod.conf -i

sed 's#28017#28020#g' /mongodb/28020/conf/mongod.conf -i

3、启动mongodb多实例

mongod -f /mongodb/28017/conf/mongod.conf

mongod -f /mongodb/28018/conf/mongod.conf

mongod -f /mongodb/28019/conf/mongod.conf

mongod -f /mongodb/28020/conf/mongod.conf

netstat -anpt | grep mongod

4、配置普通复制集(1主2从)

mongo -port 28017 admin

config = {_id: 'my_repl', members: [

{_id: 0, host: '192.168.8.5:28017'},

{_id: 1, host: '192.168.8.5:28018'},

{_id: 2, host: '192.168.8.5:28019'}]

}

初始化副本集

rs.initiate(config)

自动选择主从

输入命令前面变成复制集的状态,一开始是SECONARY等待变成PRIMARY

查看复制集状态

rs.status()

复制当前会话登录mongodb实例28018端口验证

su - mongod

mongo -port 28018 admin

输入命令前面变成复制集的状态SECONDAY

5、配置1主1从1仲裁(arbiter)的命令,了解不用执行

mongo -port 28017 admin

config = {_id: 'my_repl', members: [

{_id: 0, host: '192.168.8.5:28017'},

{_id: 1, host: '192.168.8.5:28018'},

{_id: 2, host: '192.168.8.5:28019',"arbiterOnly":true}]

}

初始化副本集

rs.initiate(config)

6、复制集管理操作

1)查看复制集状态

查看整体复制集状态

rs.status()

查看当前是否是主节点

rs.isMaster()

查看复制集配置信息

rs.conf()

从节点临时可读

rs.slaveOk()

2)添加删除节点

删除一个节点

rs.remove("ip:port")

新增从节点

rs.add("ip:port")

新增仲裁节点

rs.addArb("ip:port")

例子1:

添加 arbiter节点(平时不工作,作用不大)

mongo -port 28017 admin

添加仲裁节点

rs.addArb('192.168.8.5:28020')

查看节点状态

rs.isMaster()

删除节点

rs.remove("192.168.8.5:28020")

查看节点状态

rs.isMaster()

再把28020实例作为仲裁节点

rs.addArb("192.168.8.5:28020")

rs.isMaster()

例子2:

删除节点

rs.remove("192.168.8.5:28019")

rs.isMaster()

新增从节点

rs.add("192.168.8.5:28019")

rs.isMaster()

3)特殊从节点

介绍:

arbiter节点:主要负责选主过程中的投票,但是不存储任何数据,也不提供任何服务

hidden节点:隐藏节点,不参与选主,也不对外提供服务。

delay节点:延时节点,数据落后于主库一段时间,因为数据是延时的,也不应该提供服务或参与选主,所以通常会配合hidden(隐藏)

一般情况下会将delay+hidden一起配置使用

配置延时节点(一般延时节点也配置成hidden)

1、查看配置信息

rs.conf()

2、配置延时从库(这里让28018端口实例延时从库)

[]中是节点id号

28018端口实例的id号为1

cfg=rs.conf()        ——定义配置为cfg变量

输入后不弹消息

cfg.members[1].priority=0         ——定义权重为0,不参与选主

cfg.members[1].hidden=true          ——隐藏节点,不参与业务

cfg.members[1].slaveDelay=60       ——延时的秒数

cfg.members[1].votes=0           ——不投票,持有票数为0

rs.reconfig(cfg)          ——重新加载配置

3、查看配置信息

rs.conf()

测试:

复制当前会话

第二个会话:

su – mongod

mongo -port 28018 admin

开启从节点临时可读

rs.slaveOk()

查看所有数据库

show dbs

第一个会话:

创建数据库delay并创建haha表写入内容

use delay

db.haha.insert({id : "101" ,name : "zhangsan" ,age : "18" ,gender : "male"})

查看数据库

show dbs

第二个会话:

查看数据库

show dbs

数据还未同步到

等待60秒后再次查询

show dbs

delay数据库同步

查看数据库中内容

use delay

show tables

db.haha.find()

取消延时从库命令:

cfg=rs.conf()

cfg.members[2].priority=1

cfg.members[2].hidden=false

cfg.members[2].slaveDelay=0

rs.reconfig(cfg)

4)副本集其他操作命令

查看副本集的配置信息

rs.conf()

查看副本集各成员的状态

rs.status()

副本集角色降级(不要人为随便操作)

rs.stepDown(300)

rs.freeze(300) //锁定从,使其不会转变成主库

freeze()和stepDown单位都是秒。

设置副本节点可读:在副本节点执行

rs.slaveOk()          ——临时,重启失效

注:每次在从库上查询必须输入“rs.slaveOk()”才能查询数据,可以设置永久可读

会话二:

创建配置文件

vim /home/mongod/.mongorc.js

添加:

rs.slaveOk()

验证:

mongo -port 28018 admin

查看所有数据库

show dbs

可以直接查看,不用输入rs.slaveOk()

查看副本节点(监控主从延时)

rs.printSlaveReplicationInfo()

28018做了从库延时,所以延时60秒

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2312409.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQLAlchemy系列教程:集成Pydantic增强数据处理能力

本教程介绍如何将Pydantic用于数据验证&#xff0c;SQLAlchemy用于数据库操作&#xff0c;从而通过强大的数据处理能力增强Python应用程序。 介绍 在现代web开发中&#xff0c;确保数据的有效性和完整性至关重要。Pydantic和SQLAlchemy是两个功能强大的Python库&#xff0c;可…

【数据结构初阶】---堆的实现、堆排序以及文件中的TopK问题

1.树的概念及结构 1.1树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有一个特殊的结点&…

IP,MAC,ARP 笔记

1.什么是IP地址 IP 地址是一串由句点分隔的数字。IP 地址表示为一组四个数字&#xff0c;比如 192.158.1.38 就是一个例子。该组合中的每个数字都可以在 0 到 255 的范围内。因此&#xff0c;完整的 IP 寻址范围从 0.0.0.0 到 255.255.255.255。 IP 地址不是随机的。它们由互…

【记录】Python3|Linux下安装Virtualenv和virtualenvwrapper用于处理虚拟环境

之前写过一篇Anaconda的&#xff1a;【安装】Python3&#xff5c;Windows下安装Anaconda、pytorch&#xff0c;以及修改pip默认安装路径_anaconda pip修改安装的包路径-CSDN博客 还写过一篇专门讲所有虚拟环境的&#xff1a;【记录】环境&#xff5c;Ubuntu18.04 Python 开发环…

VSTO(C#)Excel开发3:Range对象 处理列宽和行高

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…

Selenium库打开指定端口(9222、9333等)浏览器【已解决!!!】

就是在写动态爬虫爬取数据的过程中&#xff0c;如果用selenium的话&#xff0c;有一个缺点&#xff0c;就是当我们去测试一个网站能不能爬取&#xff0c;它都会重新换端口打开一个浏览器&#xff0c;不会使用上一次使用的浏览器&#xff0c;在实际使用过程中这样调试很烦&#…

蓝桥杯备考:倍增算法详解

如果我们想暴力求解的话&#xff0c;我们的时间复杂度是O&#xff08;N&#xff09;b最大是10的9次方&#xff0c;这时候我们一定会超时 #include <iostream> using namespace std;typedef long long LL; LL a,b,p;LL ret 1; int main() {cin >> a >> b &g…

SQL经典查询

查询不在表里的数据&#xff0c;一张学生表&#xff0c;一张学生的选课表&#xff0c;要求查出没有选课的学生&#xff1f; select students.student_name from students left join course_selection on students.student_idcourse_selection.student_id where course_selecti…

## DeepSeek写水果记忆配对手机小游戏

DeepSeek写水果记忆配对手机小游戏 提问 根据提的要求&#xff0c;让DeepSeek整理的需求&#xff0c;进行提问&#xff0c;内容如下&#xff1a; 请生成一个包含以下功能的可运行移动端水果记忆配对小游戏H5文件&#xff1a; 要求 可以重新开始游戏 可以暂停游戏 卡片里的水果…

【GoTeams】-5:引入Docker

本文目录 1. Dokcer-compose回顾下Docker知识编写docker-compose.yaml运行docker 2. 部署go服务编写dockerfile 1. Dokcer-compose 这里简单先用一下win版本的Docker&#xff0c;后期开发好了部署的时候再移植到服务器下进行docker部署。 输入命令docker-compose version 就可…

将自定义vue组件加载在Mapbox或Maplibre的marker和popup上

1. 使用场景 在开发WebGIS应用时&#xff0c;我们常需要将自定义UI组件与地图元素结合。本文介绍如何将Vue组件集成到Mapbox/Maplibre的Marker标记点和Popup弹窗中&#xff0c;实现动态交互式的地图功能。 2. 为什么需要特殊处理&#xff1f; 在常规开发中我们大多的处理是 …

GB28181视频监控流媒体平台LiveGBS如何自定义收流端口区间以便减少收流端口数或解决端口冲突问题

LiveGBS GB28181流媒体服务在接收视频的时候默认是使用30000-30249&#xff0c; webrtc流播放端口区间默认是UDP的30250-30500区间。有些网络环境不方便开放这么大的端口区间&#xff0c;下面介绍下如何修改配置这个区间。 从页面上修改这个区间&#xff0c;端口区间尽量设置大…

rabbitmq-amqp事务消息+消费失败重试机制+prefetch限流

1. 安装和配置 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency><dependency> <groupId>com.fasterxml.jackson.core</groupId> <arti…

golang 从零单排 (一) 安装环境

1.下载安装 打开网址The Go Programming Language 直接点击下载go1.24.1.windows-amd64.msi 下载完成 直接双击下一步 下一步 安装完成 环境变量自动设置不必配置 2.验证 win r 输入cmd 打开命令行 输入go version

康谋分享 | 3DGS:革新自动驾驶仿真场景重建的关键技术

随着自动驾驶技术的迅猛发展&#xff0c;构建高保真、动态的仿真场景成为了行业的迫切需求。传统的三维重建方法在处理复杂场景时常常面临效率和精度的挑战。在此背景下&#xff0c;3D高斯点阵渲染&#xff08;3DGS&#xff09;技术应运而生&#xff0c;成为自动驾驶仿真场景重…

【够用就好008】开新坑自学esb32烧录进军物联网和嵌入式

见字如面&#xff0c;这里是AKA AIGC创意人竹相左边。 学习使用了三年的AI工具&#xff0c;现在最大的自信就是业余时间可以学习任何自己感兴趣的事&#xff0c;感觉手搓火箭也不是梦。 今天开个新坑&#xff0c;也是逐步探索想要进入的新世界。物联网&#xff08;IoT&#…

Go红队开发—格式导出

文章目录 输出功能CSV输出CSV 转 结构体结构体 转 CSV端口扫描结果使用CSV格式导出 HTML输出Sqlite输出nmap扫描 JSONmap转json结构体转jsonjson写入文件json编解码json转结构体json转mapjson转string练习&#xff1a;nmap扫描结果导出json格式 输出功能 在我们使用安全工具的…

element-plus中table组件的使用

1、table组件的基本使用 注意&#xff1a; ①对象集合&#xff0c;要从后端查询。 ②prop是集合中的对象的属性名&#xff1b;label是表格表头的名称。 2、将性别一列的71转为男&#xff0c;72转为女 问题描述&#xff1a; 解决步骤&#xff1a; ①将el-table-column变成双标签…

Go加spy++隐藏窗口

最近发现有些软件的窗口就像狗皮膏药一样&#xff0c;关也关不掉&#xff0c;一点就要登录&#xff0c;属实是有点不爽了。 窗口的进程不能杀死&#xff0c;但是窗口我不想要。思路很简单&#xff0c;用 spy 找到要隐藏的窗口的句柄&#xff0c;然后调用 Windows 的 ShowWindo…

网络安全通信架构图

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 在安全通信里面我经常听到的2个东西就是SSL和TLS&#xff0c;这2个有什么区别呢&#xff1f;以及HTTPS是怎么通信的&#xff1f;包括对称加密、非对称加密、摘要、…