MongoDB用户管理和复制组
用户管理
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 用的是变种))
如果发生主库宕机,复制集内部会进行投票选举,选择一个新的主库替代原有主库对外提供服务。同时复制集会自动通知客户端程序,主库已经发生切换了。应用就会连接到新的主库。
- 副本集特性
- 多个 MongoDB 实例建立的集群
- 任何节点都可以作为 Primary
- 所有写操作都走 Primary
- 自动故障转移
- 自动恢复
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秒
相关文章:
MongoDB用户管理和复制组
用户管理 1、建用户时,use到的库就是此用户的验证库 2、登录时必须明确指定验证库才能登录 3、通常管理员用的验证库是admin,普通用户的验证库一般是所管理的库设置为验证库 4、如果直接登录到数据库,不进行use(示例ÿ…...
【Android】setText调用导致的悬浮窗抖动问题
在Android13中,有这么一个bug,写一个可以拖到的悬浮窗,这个悬浮窗里有TextView,在拖到某个位置后,再调用TextView的setText方法,会发现出现了一个窗口动画,悬浮窗跳到了起始位置,从开…...
【从零开始学习计算机科学】数字逻辑(四)数字系统设计
【从零开始学习计算机科学】数字逻辑(四)数字系统设计 数字系统设计硬件描述语言 HDL(Hardware Description Language)Verilog HDL 的起源与发展HDL 软核、固核和硬核的重用HDL 的应用数字系统设计实现数字系统设计 一个数字集成电路的可以从不同的层次(系统级、算法级、…...
QT 作业 C++ day5
作业 代码 MyQThread.h class MyThread : public QThread {Q_OBJECT public:MyThread(QObject *parent nullptr); protected:void run() override; signals://向ui界面发送的 "复制进度" 的信号void copy_process_signal(int index); public slots:// "复…...
洛谷 P2234:[HNOI2002] 营业额统计 ← STL set
【题目来源】 https://www.luogu.com.cn/problem/P2234 【题目描述】 Tiger 最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger 拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析…...
植物神经功能紊乱检查不出来,浑身难受?
植物神经功能紊乱,又称为自主神经功能失调,是一种功能性神经症,它涉及身体多个系统的不规则反应,通常没有器质性病变作为基础。这意味着,尽管患者可能会体验到多种症状,如焦虑、紧张、心悸、疲劳、失眠等&a…...
vue3 遇到babel问题(exports is not defined) 解决方案
由于我在引用ant-design-vue插件,于是产生了下图的问题。 1.问题分析 Babel 是一个 JavaScript 编译器,主要用于:将 ES6 代码转译为 ES5 代码,以兼容旧版浏览器。处理模块化语法(如 import/export)。 2.解…...
基于SpringBoot+Vue的工商局商家管理系统
开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…...
ESP8266 入门(第 2 部分):使用 AT 命令
使用 AT 命令对 WiFi 收发器ESP8266编程 本教程是上一个教程 ESP8266 入门(第 1 部分)的延续。因此,简单回顾一下,在之前的教程中,我们介绍了 ESP 模块,并学习了一些基础知识。我们还使用 FTDI 串行适配器模块制作了一个开发板,该模块可以很容易地用于使用 AT 命令和 A…...
【CSS3】筑基篇
目录 复合选择器后代选择器子选择器并集选择器交集选择器伪类选择器 CSS 三大特性继承性层叠性优先级 背景属性背景色背景图背景图平铺方式背景图位置背景图缩放背景图固定背景复合属性 显示模式显示模式块级元素行内元素行内块元素 转换显示模式 结构伪类选择器结构伪类选择器…...
11-Agent中配置自己的插件
目录 关键词 摘要 速览 配置和集成自定义插件 使用AI插件在直播间绘制图像 API接口调用及配置说明 创建和配置API工具以生成图像 编写和配置参数及API调用说明 如何配置和使用API进行HTTP请求 配置和测试API插件的步骤 思维导图 发言总结 要点回顾 如何配置一个专…...
2025-03-08 学习记录--C/C++-PTA 习题10-1 判断满足条件的三位数
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 一、题目描述 ⭐️ 裁判测试程序样例: #include <stdio.h> #include <math.h>int search( int n );int…...
INFINI Labs 产品更新 | Easysearch 增加异步搜索等新特性
INFINI Labs 产品更新发布!此次更新,Easysearch 增加了新的功能和数据类型,包括 wildcard 数据类型、Point in time 搜索 API、异步搜索 API、数值和日期字段的 doc-values 搜索支持,Console 新增了日志查询功能。 INFINI Easyse…...
关于网络数通工程师 OSPF 协议的常见面试问题
基础理论部分 OSPF是什么?其核心设计目标及主要特性有哪些? OSPF(开放式最短路径优先)是基于链路状态的内部网关协议(IGP),使用Dijkstra的SPF算法计算最短路径树,核心目标包括…...
Go 语言 + libbpfgo 实战 eBPF 开发
Go 语言 libbpfgo 实战 eBPF 开发 1. 引言 这是专栏的第一篇文章,我们将从环境准备、示例代码运行和详解三个方面,带你快速入门 eBPF 开发。 📌 读完这篇文章,你将学会: ✔️ 如何用 Go libbpfgo 开发 eBPF 程序。…...
练习题:74
目录 Python题目 题目 题目分析 需求理解 关键知识点 实现思路分析 复杂度分析 可能遇到的问题及注意事项 代码实现 代码解释 运行思路 1. 列表定义阶段 2. for 循环启动阶段 3. 偶数判断与 continue 语句执行阶段 4. 奇数元素输出阶段 5. 循环结束阶段 结束语…...
Python 性能优化:从入门到精通的实用指南
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
C# OPC DA获取DCS数据(提前配置DCOM)
OPC DA配置操作手册 配置完成后,访问远程ip,就能获取到服务 C#使用Interop.OPCAutomation采集OPC DA数据,支持订阅(数据变化)、单个读取、单个写入、断线重连...
xinference docker 部署方式
文章目录 简绍docker 安装方式访问地址对应官网在 dify 中 添加 xinference 容器内置大语言模型嵌入模型图像模型音频模型重排序模型视频模型 简绍 Xorbits Inference (Xinference) 是一个开源平台,用于简化各种 AI 模型的运行和集成。借助 Xinference,…...
基于Kubernetes部署MySQL主从集群
以下是一个基于Kubernetes部署MySQL主从集群的详细YAML示例,包含StatefulSet、Service、ConfigMap和Secret等关键配置。MySQL主从集群需要至少1个主节点和多个从节点,这里使用 StatefulSet 初始化脚本 实现主从自动配置。 1. 创建 Namespace (可选) ap…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
