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…...

【Azure 架构师学习笔记】- Azure Databricks (17) --Delta Live Table和Delta Table
本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (16) – Delta Lake 和 ADLS整合 前言 前面介绍了Delta Table,但是Databricks又推出了“Delta Live Tables(DLTs&…...

Mybatis Generator 使用手册
第一章 什么是Mybatis Generator? MyBatis Generator Core – Introduction to MyBatis Generator MyBatis生成器(MBG)是MyBatis框架的代码生成工具。它支持为所有版本的MyBatis生成代码,通过解析数据库表(或多个表&…...

快乐数 力扣202
一、题目 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1&…...

SPA单页面应用优化SEO
1.SSR服务端渲染 将组件或页面通过服务器生成html,再返回给浏览器,如nuxt.js或vue-server-renderer const Vue require(vue); const server require(express)(); const renderer require(vue-server-renderer).createRenderer();const vueApp new …...

城市霓虹灯夜景拍照后期Lr调色教程,手机滤镜PS+Lightroom预设下载!
调色教程 在城市霓虹灯夜景拍摄中,由于现场光线复杂等因素,照片可能无法完全呈现出当时的视觉感受。通过 Lr 调色,可以弥补拍摄时的不足。例如,运用基本调整面板中的曝光、对比度、阴影等工具,可以处理出画面的整体明暗…...

通领科技冲刺北交所
高质量增长奔赴产业新征程 日前,通领科技已正式启动在北交所的 IPO 进程,期望借助资本市场的力量,加速技术升级,推动全球化战略布局。这一举措不仅展现了中国汽车零部件企业的强大实力,也预示着行业转型升级的新突破。…...

隐私保护在 Facebook 用户身份验证中的应用
在这个数字化的时代,个人隐私保护成为了公众关注的焦点。社交媒体巨头 Facebook 作为全球最大的社交平台之一,拥有数十亿用户,其在用户身份验证过程中对隐私保护的重视程度直接影响着用户的安全感和信任度。本文将探讨 Facebook 在用户身份验…...

深度学习/强化学习调参技巧
深度调优策略 1. 学习率调整 技巧:学习率是最重要的超参数之一。过大可能导致训练不稳定,过小则收敛速度慢。可以使用学习率衰减(Learning Rate Decay)或自适应学习率方法(如Adam、RMSprop)来动态调整学习…...

python面试常见题目
1、python 有几种数据类型 数字:整形 (int),浮点型 (float)布尔 ( bool):false true字符串 (string)列表 (list)元组 (tuple)字典 &…...

echarts折线图设置背景颜色:X轴和Y轴组成部分背景色
echarts折线图设置背景颜色 关键代码 splitArea: {show: true,areaStyle: {color: [#F2F2F2],},},完整代码位置显示 yAxis: {type: value,boundaryGap: [0, 100%],max: 1,interval: 1,// 于设置y轴的字体axisLabel: {show: false, //这里的show用于设置是否显示y轴下的字体 默…...