Mongo oplog理解
转载请注明出处:
oplog(操作日志)是MongoDB中用于记录所有写操作的日志。它是一个特殊的集合,存储在副本集的主节点中。oplog用于确保副本集中的副节点与主节点的数据保持一致。当主节点执行写操作时,相应的操作将被记录到oplog中,副节点则通过读取oplog来获取最新的数据变化。
数据结构
oplog在mongo数据库主节点的local数据下,进入local数据库可以查看这个集合中存储数据的结构:
进入oplog数据库:
use local
查看数据结构:
rs0:PRIMARY> db.oplog.rs.findOne()
{
"ts" : Timestamp(1729001735, 165),
"t" : NumberLong(187),
"h" : NumberLong(0),
"v" : 2,
"op" : "i",
"ns" : "topology.filteredReason",
"ui" : UUID("94a529f7-dbf1-4be0-b296-361094515e13"),
"wall" : ISODate("2024-10-15T14:15:35.636Z"),
"lsid" : {
"id" : UUID("bbf4c6e6-e139-48e2-82df-a0b15bd0a89f"),
"uid" : BinData(0,"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=")
},
"txnNumber" : NumberLong(29170),
"stmtId" : 0,
"prevOpTime" : {
"ts" : Timestamp(0, 0),
"t" : NumberLong(-1)
},
"o" : {
"_id" : "75a4d50f-8f37-4d06-8abe-d1c2b0de97a0",
"reason" : "link[maipu_3:gigabitethernet3>maipu_2:gigabitethernet3] has no label",
"type" : "LINK",
"key" : "maipu_3:gigabitethernet3>maipu_2:gigabitethernet3",
"tePolicyColorTupleId" : "maipu_3_maipu_1_MaiPu31_3628",
"_class" : "com.tethrnet.terra.service.sr.topology.lib.model.terra.te.svc.filteredreasontop.FilteredReason"
}
}
rs0:PRIMARY>
oplog是一个无限增长的集合,包含以下主要字段:
- ts:时间戳,表示操作的时间。
- h:哈希值,用于唯一标识该操作。
- op:操作类型,可能的值包括“i”(插入)、“u”(更新)、“d”(删除)。
- ns:命名空间,表示操作所属的数据库和集合。
- o:操作的详细内容,具体取决于操作类型。
特性
- oplog(操作日志)是一个特殊的固定大小集合,记录所有修改数据库数据的操作。
- 它可以超越其配置大小限制,以避免删除大多数提交点。
- 每个副本集成员都包含oplog的副本,位于local.oplog.rs集合中。
- 操作日志中的每个操作都是幂等的,即应用一次或多次都会产生相同的结果。
- oplog用于复制和恢复节点,如果节点下线,需要oplog来恢复状态。
配置
- 默认情况下,MongoDB会自动创建oplog,但可以自定义其大小。
- 可以通过oplogSizeMB选项指定初始oplog大小。
- 使用replSetResizeOplog命令动态更改oplog大小,无需重启mongod。
- 可以设置最小保留时间,防止删除最近的操作日志条目。
oplog的作用
- 数据同步:副节点通过读取oplog来同步主节点的写入操作,确保数据一致性。
- 故障恢复:在主节点发生故障时,可以根据oplog中的信息快速恢复数据。
- 查询历史:oplog提供了一个操作历史的记录,有助于审计和问题排查。
命令
oplog存储在local
数据库中。进入MongoDB shell后,您需要切换到local
数据库:
- 查看当前最大oplog大小:
db.getSiblingDB("local").oplog.rs.stats(1024*1024).maxSize
- 更改最大oplog大小:
db.adminCommand({
replSetResizeOplog: 1,
size: Double(16384) // megabytes
}) 过滤oplog日志
只对特定操作或特定时间范围内的日志,可以使用查询条件过滤结果。例如,查看类型为“插入”的操作:
db.oplog.rs.find({ op: "i" }).pretty()
- 设置最小保留时间:
db.adminCommand({
replSetResizeOplog: 1,
minRetentionHours: 24 // 保留至少24小时的日志条目
})
其他重要信息
- oplog大小取决于存储引擎和可用空间。内存存储引擎使用5%物理内存,WiredTiger使用5%可用空间。
- 默认情况下,不设置最小保留时间,系统会自动截断以维持配置的最大oplog大小。
- 在副本集中运行时,不能手动对oplog执行写操作。
- oplog对于复制和恢复节点至关重要,不能删除local.oplog.rs集合。
- 在sharded集群中,每个副本组都有自己的oplog。
通过理解和正确配置oplog,您可以优化MongoDB的复制性能,并确保数据的一致性和可用性。适当的oplog大小对于高效的复制和恢复至关重要。
Mongo oplog理解的更多相关文章
- mongo oplog 整理
首先需要介绍一下mongodb local库的作用 local库是MongoDB的系统库,记录着时间戳和索引和复制集等信息 test:PRIMARY> use local switched to ...
- Mongodb基于oplog恢复至任意时间
背景: 最近后端基于mongo的项目越来越多,MySQL基于冷备份+binlog可以恢复至任意时间点,那么mongo是否有同样的功能呢?经过调研发现可以通过dump+oplog可以实现粒度更细致的恢复 ...
- [Solr] (源) Solr与MongoDB集成,实时增量索引
一. 概述 大量的数据存储在MongoDB上,需要快速搜索出目标内容,于是搭建Solr服务. 另外一点,用Solr索引数据后,可以把数据用在不同的项目当中,直接向Solr服务发送请求,返回xml.js ...
- Solr与MongoDB集成,实时增量索引
Solr与MongoDB集成,实时增量索引 一. 概述 大量的数据存储在MongoDB上,需要快速搜索出目标内容,于是搭建Solr服务. 另外一点,用Solr索引数据后,可以把数据用在不同的项目当中, ...
- 基于netcore实现mongodb和ElasticSearch之间的数据实时同步的工具(Mongo2Es)
基于netcore实现mongodb和ElasticSearch之间的数据实时同步的工具 支持一对一,一对多,多对一和多对多的数据传输方式. 一对一 - 一个mongodb的collection对应一 ...
- MongoDB-Elasticsearch 实时数据导入
时间 2017-09-18 栏目 MongoDB 原文 http://blog.csdn.net/liangxw1/article/details/78019356 5 ways to sync ...
- TiDB 在摩拜单车的深度实践及应用
一.业务场景 摩拜单车 2017 年开始将 TiDB 尝试应用到实际业务当中,根据业务的不断发展,TiDB 版本快速迭代,我们将 TiDB 在摩拜单车的使用场景逐渐分为了三个等级: P0 级核心业务: ...
- mongo 原理 Replica Set Oplog
[客户的写请求全部发送至主节点] Primary. The primary receives all write operations. Secondaries. Secondaries replic ...
- mongodb 系列 ~ mongo的副本集(3)
一 简介:今天咱们来聊聊mongodb复制的具体一些案例 二 副本集 1 当mongodb采用全量复制时,如何观察全量复制的进度 对比文件本身和primary大小 2 mongodb全量复制的过程 旧 ...
- mongo 是什么
一.概述1.MongoDB是什么?用一句话总结MongoDB是一款为web应用程序和互联网基础设施设计的数据库管理系统.没错MongoDB就是数据库,是NoSQL类型的数据库 2.为什么要使用Mong ...
随机推荐
- 很好用的python游戏环境(续):强化学习算法走迷宫游戏环境(导航问题 navigation):分享一个python语言的迷宫游戏环境
相关: 很好用的python游戏环境:强化学习算法走迷宫游戏环境(导航问题 navigation):分享一个python语言的迷宫游戏环境 前文分享了一个python下的maze游戏环境,本文再给出一 ...
- configure: error: Can't find GL/gl.h. Look for Mesa devel packages for your distro.
1. 安装文件查询工具 sudo apt install plocate 2. 查询头文件地址,shell命令: locate GL/gl.h 3. 为编译时指定其他的头文件查询地址: export ...
- 白鲸开源CEO郭炜在2024 DataOps发展大会上获聘专家
2024年5月15日,白鲸开源CEO郭炜在2024 DataOps发展大会上被正式聘任为DataOps专家,并获得了荣誉证书.本次大会由中国通信标准化协会主办,中关村科学城管委会提供支持,大数据技术标 ...
- JS Map对象与map方法
前言 最近遇到一个遍历的问题,查资料的过程中,发现有个 Map 对象,提供了很多方法可以轻松地获取我们想要的数据,之前只知道有 map ,没想到还有 Map ,是不是有点绕?不急,这两个东西都是虽然 ...
- centos7安装docker详细教程
一.准备工作 1.系统要求 docker要求centos的内核版本不低于3.10.centos7满足最低内核要求. 检查当前的内核版本 [root@zspc /]# uname -r 3.10.0-1 ...
- 执行maven时报内存溢出OutOfMemory
解决的方法是调整java的堆大小的值. Windows环境中 找到文件%M2_HOME%\bin\mvn.bat ,这就是启动Maven的脚本文件,在该文件中你能看到有一行注释为: @REM set ...
- Microsoft Ignite 2022 After Party (Placeholder)
通过Microsoft Ignite 2022了解最新的创新成果,向产品专家和合作伙伴学习,优化自身技能组合,并与来自世界各地的人士建立联系.请于 PDT 时间 10 月 12 日至 14 日早上 9 ...
- uni-app和vue及微信小程序的异同
uni-app和vue的区别1.目录不同 uni-app目录依赖原生小程序风格,比如分包的概念 vue中对不同的页面只需要在views文件夹中定义不同组件,然后配置路由跳转就行了,所有页面都是这样, ...
- 怎样在局域网中给网站作ssl认证,使其能以https协议访问(转)
如果要在局域网达到效果需要满足以下几点要求: 1. 证书由可信任的CA机构颁发 2. 证书在有效期 3. 访问地址和证书的认证地址一致 说明: 1. 需要在局域网内构建CA机构 2. 证书的有效期建议 ...
- 《花100块做个摸鱼小网站! 》第五篇—通过xxl-job定时获取热搜数据
️基础链接导航️ 服务器 → ️ 阿里云活动地址 看样例 → 摸鱼小网站地址 学代码 → 源码库地址 一.前言 我们已经成功实现了一个完整的热搜组件,从后端到前端,构建了这个小网站的核心功能.接下来, ...