当前位置: 首页 > news >正文

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 用的是变种))

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

  • 副本集特性
  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秒

相关文章:

MongoDB用户管理和复制组

用户管理 1、建用户时&#xff0c;use到的库就是此用户的验证库 2、登录时必须明确指定验证库才能登录 3、通常管理员用的验证库是admin&#xff0c;普通用户的验证库一般是所管理的库设置为验证库 4、如果直接登录到数据库&#xff0c;不进行use&#xff08;示例&#xff…...

【Android】setText调用导致的悬浮窗抖动问题

在Android13中&#xff0c;有这么一个bug&#xff0c;写一个可以拖到的悬浮窗&#xff0c;这个悬浮窗里有TextView&#xff0c;在拖到某个位置后&#xff0c;再调用TextView的setText方法&#xff0c;会发现出现了一个窗口动画&#xff0c;悬浮窗跳到了起始位置&#xff0c;从开…...

【从零开始学习计算机科学】数字逻辑(四)数字系统设计

【从零开始学习计算机科学】数字逻辑(四)数字系统设计 数字系统设计硬件描述语言 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 最近被公司升任为营业部经理&#xff0c;他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger 拿出了公司的账本&#xff0c;账本上记录了公司成立以来每天的营业额。分析…...

植物神经功能紊乱检查不出来,浑身难受?

植物神经功能紊乱&#xff0c;又称为自主神经功能失调&#xff0c;是一种功能性神经症&#xff0c;它涉及身体多个系统的不规则反应&#xff0c;通常没有器质性病变作为基础。这意味着&#xff0c;尽管患者可能会体验到多种症状&#xff0c;如焦虑、紧张、心悸、疲劳、失眠等&a…...

vue3 遇到babel问题(exports is not defined) 解决方案

由于我在引用ant-design-vue插件&#xff0c;于是产生了下图的问题。 1.问题分析 Babel 是一个 JavaScript 编译器&#xff0c;主要用于&#xff1a;将 ES6 代码转译为 ES5 代码&#xff0c;以兼容旧版浏览器。处理模块化语法&#xff08;如 import/export&#xff09;。 2.解…...

基于SpringBoot+Vue的工商局商家管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…...

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 判断满足条件的三位数

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 裁判测试程序样例&#xff1a; #include <stdio.h> #include <math.h>int search( int n );int…...

INFINI Labs 产品更新 | Easysearch 增加异步搜索等新特性

INFINI Labs 产品更新发布&#xff01;此次更新&#xff0c;Easysearch 增加了新的功能和数据类型&#xff0c;包括 wildcard 数据类型、Point in time 搜索 API、异步搜索 API、数值和日期字段的 doc-values 搜索支持&#xff0c;Console 新增了日志查询功能。 INFINI Easyse…...

关于网络数通工程师 OSPF 协议的常见面试问题

基础理论部分‌ ‌OSPF是什么&#xff1f;其核心设计目标及主要特性有哪些&#xff1f;‌ OSPF&#xff08;开放式最短路径优先&#xff09;是基于链路状态的内部网关协议&#xff08;IGP&#xff09;&#xff0c;使用Dijkstra的SPF算法计算最短路径树&#xff0c;核心目标包括…...

Go 语言 + libbpfgo 实战 eBPF 开发

Go 语言 libbpfgo 实战 eBPF 开发 1. 引言 这是专栏的第一篇文章&#xff0c;我们将从环境准备、示例代码运行和详解三个方面&#xff0c;带你快速入门 eBPF 开发。 &#x1f4cc; 读完这篇文章&#xff0c;你将学会&#xff1a; ✔️ 如何用 Go libbpfgo 开发 eBPF 程序。…...

练习题:74

目录 Python题目 题目 题目分析 需求理解 关键知识点 实现思路分析 复杂度分析 可能遇到的问题及注意事项 代码实现 代码解释 运行思路 1. 列表定义阶段 2. for 循环启动阶段 3. 偶数判断与 continue 语句执行阶段 4. 奇数元素输出阶段 5. 循环结束阶段 结束语…...

Python 性能优化:从入门到精通的实用指南

Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...

C# OPC DA获取DCS数据(提前配置DCOM)

OPC DA配置操作手册 配置完成后&#xff0c;访问远程ip&#xff0c;就能获取到服务 C#使用Interop.OPCAutomation采集OPC DA数据&#xff0c;支持订阅&#xff08;数据变化&#xff09;、单个读取、单个写入、断线重连...

xinference docker 部署方式

文章目录 简绍docker 安装方式访问地址对应官网在 dify 中 添加 xinference 容器内置大语言模型嵌入模型图像模型音频模型重排序模型视频模型 简绍 Xorbits Inference (Xinference) 是一个开源平台&#xff0c;用于简化各种 AI 模型的运行和集成。借助 Xinference&#xff0c;…...

基于Kubernetes部署MySQL主从集群

以下是一个基于Kubernetes部署MySQL主从集群的详细YAML示例&#xff0c;包含StatefulSet、Service、ConfigMap和Secret等关键配置。MySQL主从集群需要至少1个主节点和多个从节点&#xff0c;这里使用 StatefulSet 初始化脚本 实现主从自动配置。 1. 创建 Namespace (可选) ap…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...