MongoDB 会丢数据吗? 在次补刀MongoDB 双机热备,以及如何删除Journal log【转】

news/2025/3/1 7:50:48/文章来源:https://www.cnblogs.com/paul8339/p/18670611

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis ,Oracle ,Oceanbase 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请加微信号 liuaustin3 (共1220人左右 1 + 2 + 3 +4)新人会进入3群 

以后会争取每天一段感悟,不讨论对错,幼儿园的孩子才每件事论对错

最强大的,这个词不一定是个好词,最强大的往往是最虚弱的,那些天天和你谈格局,谈奉献,谈爱,强大的人,很可能内心和垃圾堆里面的碎玻璃一样,闪闪发光。如何和这样的人交往呢,一定要把自己碎的更厉害,发出耀眼的光,此刻他就不和你谈格局了

上期中提到了关于MongoDB 双机热备那篇文章是毒 !本期继续补刀,不把这样害死人的思维模式捅死,我是不会罢休的。

在使用多年MongoDB 后,是否问过一个问题,MongoDB 是否会丢数据,回答是不会。为什么?

在MongoDB的使用中,除了我们熟知了 Oplogs 来进行数据的复制同步到其他的节点,同时MongoDB也提供大部分传统数据库都提供的WAL 日志,--- Journaling ,在早期的版本 4.0 前你还可以关闭Journal log 

storage.journal.enaled: false

但在4.0后的MongoDB 你不能在关闭Journal log, 这样的情况下很多人认为MongoDB 不会丢失数据,实际上不是的,这里我们全部默认MongoDB 的数据引擎为wiredTiger 并且checkpoint的工作是正常的,在这样的情况下, MongoDB 有了Journal log 有了checkpoint 的工作机制,这里看似MongoDB 应该不会丢数据,但是我们需要注意的是,看下图

图片

在 MongoDB 中,如果是单机的模式下,从逻辑的角度来说,会丢数据按照数据库秒的默认设置,100ms 刷新Journal log ,则按照上图,会有可能最大丢失 100ms 内在MongoDB 中操作的数据。

怎么结果是丢数据,MongoDB 会丢数据,估计那些对于这个在DBEGINE 排名第四的数据库还是唯一的NOSQL数据库要各种 “踩” 了。

图片

1  没有人告诉你MongoDB 的生产部署模式是单机, 那篇官方文档提到过,建议你部署MongoDB是单机模式。

2  有没有人告诉你,Mongodb 基本的部署模式 replica set 复制集默认的写是 w: majority 

Majority 的含义为写大多数,也就是默认复制集合的节点最少为3 ,在这样的情况下,大多数为至少每次写入数据落盘2个节点。

 

图片

好,那么在这样的操作下,MongoDB 有了Journal log , 有了Oplogs 支持下的 Replica 和 事务的大多数写作数的情况下,此时的MongoDB 的数据是安全的,在这样的情况下,我们认为操作 MongoDB 事务的情况下,数据是不会丢失的。

以下面的语句,这里插入了一条数据并且明确的标定,我们写入的情况下返回成功的前提是,节点中的大多数回馈,数据写入后,反馈事务提交成功。

db.data.insertOne(
   { name: "Simon", age : 30, level: "C" },
   { writeConcern: { w: "majority" , wtimeout: 5000 } }
)

在这样的情况下MongoDB 的数据写入是安全的,可以信赖的。

此时我们回到题目中的问题,如果你的MongoDB 是通过复制集中的协议但是你只搭建了2个节点,那么根据上述的MongoDB 数据安全和数据不丢失的理论就无从实现了,因为2个节点是不存在大多数这个概念的,在这样的情况下,我们无法从逻辑上保证数据是安全不丢失的。2节点破坏了MongoDB 的基本原理,包含Arbiter 的方式部署,这样的方式也在MongoDB 不在被推荐和建议。

所以每个数据库本身都有自己的理论和实现,并保证通过自己的理论来完成数据库不丢失数据的诺言。

所以MongoDB 双机热备就是一个伪命题,一个到处展现对于MongoDB无知的状态。

另关于MongoDB 如何清理  journal log 的问题,这里做一个回答,网络关于如果清理journal log 的部分,各种回答都有,这里注意

1  现在MongoDB 4.x 后都是WiredTiger 的数据引擎,这样的情况下不存在修改smallfile 的清理 journal log 的方案。

2  现有的Journal log 是产生100MB 大小的文件,并且在数据库做了checkpoint 的操作后,会自动删除废弃的 journal log 

3  如果需要手动删除journal log  则可以采用如下的方式进行手动删除

1 在需要删除Journal log 的MongoDB 服务器运行 

db.fsyncLock()

2  进入到Journal log 的日志目录,rm 相关文件

图片

 

3  在MongoDB 中执行

db.fsyncUnlock()

以上的工作原理为,db.fsyncLock() 主要是将数据脏页全部刷新到磁盘,并停止数据的再次刷新的工作,此时就是一个人工的checkpoint点,此时可以将jounral log 进行清理。然后必须解除不能数据刷新的锁定。

最后,不懂MongoDB 基本原理,然后提出MongoDB双机热备的 T DBA 们,你们呀 ?  GET OUT

转自

MongoDB 会丢数据吗? 在次补刀MongoDB 双机热备
https://mp.weixin.qq.com/s?__biz=Mzg4NDA0NTEwNA==&mid=2247498946&idx=1&sn=38127b0be4e1cf5917e2a966d36d6d8e&chksm=cfbc989df8cb118bf1dada3efef0d86e8dd4828a85a2f8775ab043768a04e7abfb12dd167941&scene=21#wechat_redirect

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

车辆总线接口设备 - VCI

TESTBASE-VCI(Vehicle Communication Interface)系列产品是经纬恒润自主研发的一组用于汽车或工业等应用领域的便携式现场通信总线接口设备,可与PC端INTEWORK系列软件配合使用,实现总线监控、测量标定和诊断刷写等功能。概述TESTBASE-VCI(Vehicle Communication Interface…

Origin 自定义公式拟合

非线性拟合 选中数据 - 绘图 - 分析 - 拟合 - 非线性曲线拟合 - 打开对话框 - 新建函数 - 函数命名 - 输入函数表达式,如 y=a*x^2,即可。 若公式中涉及到复数,则使用 ImReal() 取实部,Imaginary() 取虚部,Imsqrt() 取开方。 如色散方程取实部,即色散部分进行拟合,则相应…

产品经理如何通过看板管理做到更直观的工作管理?

在如今快节奏的产品开发环境中,产品经理面临着众多任务和复杂的流程,如何高效管理工作成为了一大挑战。看板管理作为一种可视化的工作流程管理方法,正逐渐成为产品经理们的得力助手。你是否好奇,看板管理究竟有怎样的魔力,能让产品经理的工作变得更直观、更高效呢?接下来…

VMware17Pro虚拟机安装macOS教程

下载所需文件官方正版VMware下载(17 pro): 通过网盘分享的文件:VMware17.5.rar链接: https://pan.baidu.com/s/15EtL6XUGCIxLpvOcDwL9Ew 提取码: r6ic 下载系统镜像: 通过网盘分享的文件:macOS.Sonoma.14.5.K3.iso链接: https://pan.baidu.com/s/1H14E7snWdPhdcrRcQBtFew…

推荐一款 .NET 智慧水务物联网系统

前言 本文将介绍如何通过智能水表(如 NB-IoT 水表)、智能消火栓、智能阀门、数据采集终端(RTU 或 PLC)及其他前置传感器和设备,开发一个高效、智能的供水管理系统。该系统能够实时采集和分析供水网络中的各种数据,帮助用户单位实现精细化管理和资源优化配置。 项目介绍 智…

python类中的方法【类方法、静态方法、方法】

方法需要实例化类生成对象后才能调用,另两个不需要

【AI+框架】2025智能计算中心技术框架详解

智算中心是对外提供AI算力服务的公共基础设施,如何构建一个高性能、可扩展的技术架构,是智算中心非常重要的技术支撑,所以要在智算中心完成算力的生产、聚合、调度和释放,从而实现构建平台,提供服务。 智算中心的总体架构如下图所示:【图1】 智能计算中心总体架构图 1. 整…

Django 网页开发快速上手——实现一个博客应用

目录0 前言博客定位成果展示环境配置1 创建 project2 创建 app3 Django 三大元素——MVT4 创建你的第一个 view5 创建你的第一个 template6 migration 与 admin 端7 创建你的第一个 model8 连通 view, template 和 model9 实现注册/登录/登出功能10 模版继承11 用 css 文件美化…

DataGrip2024.3.3最新2099年激活教程附带激活工具

前言 看到新版本发布了,准备把DataGrip 2024.3.3来个大变身,激活依旧可破解至 2099 年,安装过DataGrip的小伙伴需要卸载后再重装。接下来,我将为大家详细介绍这一版本的更新内容及具体的激活方法 安装环境 [名称]:DataGrip [大小]:500MB [版本]:2024.3.3 [语言]:简体中…

QD_0001:浅谈前端框架原理

最近在看卡颂大佬的《React 设计原理》,看了第一章,就有一种醍醐灌顶的感觉**,于是决定记录分享一下这一章的内容。这里也极力推荐各位小伙伴读一下。 本人其实是 Vue 开发者,没有太多地使用过 React,只是多多少少听过一些概念,能看懂一些 React 代码 因此我的文章,会更…

CF div2 992(A~E)

VP赛时三题。被AB题卡炸了,C题反倒发挥正常,D题可惜只想到了一半 A 没发现数据范围很小可以暴力 + 题干减号看成了加号,导致创造了二十多分钟才过A题的新纪录( code B 贪心 or 找规律,也是牢了一会儿。 显然要贪心地创造出能用上第二个操作的情景。所以从\(1\)位置出发,每…

深度学习入门之手写数字识别

模型定义 我们使用 CNN 和 MLP 来定义模型: import torch.nn as nnclass Model(nn.Module):def __init__(self):"""定义模型结构输入维度为 1 * 28 * 28 (C, H, W)"""super(Model, self).__init__()# 卷积层 1self.conv1 = nn.Sequential(# 二维…