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…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
