Mongodb oplog的作用及如何评估和更改保留时间

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG数据库运维(如安装迁移,性能优化、故障应急处理等)
公众号:老苏畅谈运维
欢迎关注本人公众号,更多精彩与您分享。

oplog 是replica set或者master/slave模式专用,在replica set中oplog是一个定容集合(capped collection),其实就是一张表,它的默认大小是磁盘空间的5%(可以通过–oplogSizeMB参数修改)。
位于local库的db.oplog.rs,有兴趣可以看看里面到底有些什么内容。其中记录的是整个mongod实例一段时间内数据库的所有变更(插入/更新/删除)操作。
当空间用完时新记录自动覆盖最老的记录。其覆盖范围被称作oplog时间窗口。
需要注意的是,因为oplog是一个定容集合,所以时间窗口能覆盖的范围会因为你单位时间内的更新次数不同而变化。

1、查看oplog的内容

use local
db.oplog.rs.find().pretty()
在这里插入图片描述
主要需要关注的字段:

"ts" : Timestamp(1553597844, 1) <----操作时间
"op" : "n"                      <----操作类型
 ns:                            <----操作所在的namespace
 o:                             <----操作所对应的document,即当前操作的内容(比如更新操作时要更新的的字段和值)
 o2:                             <---在执行更新操作时的where条件,仅限于update时才有该属性

关于op操作类型主要有:

    "i": insert
    "u": update
    "d": delete
    "c": db cmd
	"db":声明当前数据库 (其中ns 被设置成为=>数据库名称+ '.')
    "n": no op,即空操作,其会定期执行以确保时效性

2、oplog查找方法

如何oplog保留时间较长,查找不便,如何进行过滤?以下是一些常用的查找方法:
–只显示insert操作
db.oplog.rs.find({“op”:“i”}).pretty()

–显示数据库相关操作
db.oplog.rs.find({“op”:“c”}).pretty()

–查询oplog里的insert记录,对应op为i的记录:
db.oplog.rs.find({“op” : “i”}).pretty().limit(3)

–查update操作命令:
db.oplog.rs.find({“op” : “u”}).pretty().limit(3)

–查delete操作命令:
db.oplog.rs.find({“op” : “d”}).pretty().limit(3)

–根据时间范围查操作:
db.oplog.rs.find({“o.createTime”: {$gte:new Date(2024,6,29)}}).limit(3)

–查时间段的操作记录:
db.oplog.rs.find({“o.createTime”: { g t e : n e w D a t e ( 2024 , 6 , 29 ) , gte:new Date(2024,6,29), gte:newDate(2024,6,29),lte:new Date(2024,7,2)}}).limit(3)

我们查查对dbtest.students集合进行操作的所有的 oplog 记录
db.oplog.rs.find({ns : “dbtest.students”})

–将oplog.rs重新创建为一个无上限的集合(会一直保留,慎用)
db.runCommand( { create: “oplog.rs”, capped: false})

–将oplog备份(转储)到文件夹 YYYYMMDD:
mongodump -u root -p 123456 --authenticationDatabase=admin --db local --collection oplog.rs -o /media/backup/$(date +%Y%m%d)

3、如何评估oplog保留大小

如果oplog 设置太大,保留时间过长,查找起来不方便。生产上建议保留个三四天,每天做一下备份。那如何进行oplog保留大小呢?

rs1 [direct: primary] local> rs.printReplicationInfo();
actual oplog size
'4096 MB'               <------当前实际值
---
configured oplog size  <--集合大小
'4096 MB'
---
log length start to end
'491682 secs (136.58 hrs)'      <--预计窗口覆盖时间
---
oplog first event time
'Sat Jun 29 2024 22:11:01 GMT+0800 (China Standard Time)'
---
oplog last event time
'Fri Jul 05 2024 14:45:43 GMT+0800 (China Standard Time)'
---
now
'Fri Jul 05 2024 14:45:46 GMT+0800 (China Standard Time)'

根据预计窗口覆盖时间,可以调整oplog大小,那么如何进行调整大小呢?
如果你的MongoDB版本为4.0以后的版本,可以直接使用replSetResizeOplog修改。

(1)查看oplog大小

rs1 [direct: primary] local> db.getReplicationInfo()
{
  configuredLogSizeMB: 4096,
  logSizeMB: 4096,
  usedMB: 16.06,
  timeDiff: 565687,
  timeDiffHours: 157.14,
  tFirst: 'Sat Jun 29 2024 22:23:17 GMT+0800 (China Standard Time)',
  tLast: 'Sat Jul 06 2024 11:31:24 GMT+0800 (China Standard Time)',
  now: 'Sat Jul 06 2024 11:31:24 GMT+0800 (China Standard Time)'
}

(2)修改oplog大小

rs1 [direct: primary] local> db.adminCommand({replSetResizeOplog:1,size:6144})
{
  ok: 1,
  '$clusterTime': {
    clusterTime: Timestamp({ t: 1720236744, i: 1 }),
    signature: {
      hash: Binary.createFromBase64('6GGIXAYyqPZI8nDe2XJP0jjjS4c=', 0),
      keyId: Long('7385858098457477126')
    }
  },
  operationTime: Timestamp({ t: 1720236744, i: 1 })
}

(3)验证oplog大小

rs1 [direct: primary] local> db.getReplicationInfo()
{
  configuredLogSizeMB: 6144,
  logSizeMB: 6144,
  usedMB: 16.06,
  timeDiff: 565797,
  timeDiffHours: 157.17,
  tFirst: 'Sat Jun 29 2024 22:23:17 GMT+0800 (China Standard Time)',
  tLast: 'Sat Jul 06 2024 11:33:14 GMT+0800 (China Standard Time)',
  now: 'Sat Jul 06 2024 11:33:14 GMT+0800 (China Standard Time)'
}

在这里插入图片描述

关注我,学习更多的数据库知识
请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

硅纪元视角 | 国内首款鸿蒙人形机器人“夸父”开启应用新篇章

在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展&#xff0c;捕捉行业动态&#xff1b;提供深入的新闻解读&#xff0c;助您洞悉技术背后的逻辑&#xff1b;汇聚行业专家的见解&#xff0c;…

景区气象站:守护旅行安全的智能向导

在繁忙的现代社会&#xff0c;人们越来越渴望逃离城市的喧嚣&#xff0c;寻找一处宁静的自然之地放松身心。景区&#xff0c;作为大自然与人类文明交织的瑰宝&#xff0c;吸引了无数游客前来探访。然而&#xff0c;多变的天气往往给游客的旅行带来不确定性。 景区气象站&#x…

Java跳出循环的四种方式

1、continue,break,return continue&#xff1a;跳出当前层循环的当前语句&#xff0c;执行当前层循环的下一条语句。   continue标签 break&#xff1a;跳出当前层循环。 break标签&#xff1a;多层循环时&#xff0c;跳到具体某层循环。 return&#xff1a;结束所有循环…

微观特征轮廓尺寸测量:光学3D轮廓仪、共焦显微镜与台阶仪的应用

随着科技进步&#xff0c;显微测量仪器以满足日益增长的微观尺寸测量需求而不断发展进步。多种高精度测量仪器被用于微观尺寸的测量&#xff0c;其中包括光学3D表面轮廓仪&#xff08;白光干涉仪&#xff09;、共聚焦显微镜和台阶仪。有效评估材料表面的微观结构和形貌&#xf…

如何选择一家适合自己的商城源码?

商城源码的选择取决于多个因素&#xff0c;包括商城的功能需求、稳定性、易用性、可定制性以及价格等。启山智软作为在市场上被广泛认可且表现优异的商城源码提供商&#xff0c;具有以下的特点和优势&#xff1a; 特点①&#xff1a;国内知名的B2B2C开源商城源码系统&#xff…

AI助手崛起:开发者的新伙伴还是未来替代者?

你好&#xff0c;我是三桥君。 自从 ChatGPT 问市以来&#xff0c;AI 将取代开发者的声音不绝于耳&#xff0c;至今还是互联网异常火热的问题。 在软件开发领域&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;正在改变开发者的工作方式。无论是代码生成、错误检测还是…

笔记15:while语句编程练习

练习一&#xff1a; 编写程序&#xff0c;求 2^24^26^2...n^2? -直到累加和大于或等于 10000 为止&#xff0c;输出累加和 -输出累加式中的项数&#xff0c;以及最大的数 n #include<stdio.h> int main() {int sum 0;int i 1;int n 0;while(sum < 10000)//将sum…

Leetcode - 周赛404

目录 一&#xff0c;3200. 三角形的最大高度 二&#xff0c;3201. 找出有效子序列的最大长度 I 三&#xff0c;3202. 找出有效子序列的最大长度 II 四&#xff0c;3203. 合并两棵树后的最小直径 一&#xff0c;3200. 三角形的最大高度 本题直接模拟&#xff0c;分别计算一下…

极简通俗VAE

一、VAE 背景&#xff1a;VAE什么变分自编码器&#xff0c;听起来起名都头大&#xff0c;用大白话告诉你。 把一个复杂图片压缩成两个参数&#xff0c;用这个参数采样再复原。 这个简单的东西是两个参数&#xff0c;均值和方差&#xff0c;用&#xff08;0&#xff0c;1&…

C语言_练习题

求最小公倍数 思路&#xff1a;假设两个数&#xff0c;5和7&#xff0c;那么最小至少也要7吧&#xff0c;所以先假定最小公倍数是两个数之间较大的&#xff0c;然后看7能不能同时整除5和7&#xff0c;不能就加1继续除 int GetLCM(int _num1, int _num2) {int max _num1>_n…

web学习笔记(八十)

目录 1.小程序实现微信一键登录 2. 小程序的授权流程 3.小程序配置vant库 4.小程序配置分包 5.小程序配置独立分包 6.小程序分包预下载 1.小程序实现微信一键登录 要先实现小程序一键登录首先我们需要给按钮设置一个绑定事件&#xff0c;然后在绑定事件内部通过wx.login…

phpexcel导入导出

前言&#xff1a; 如果你到处的excel软件打开有问题&#xff0c;下面有介绍解决办法 导入 1. composer init 初始化 2. 下载phpspreadsheet 这里需要注意php版本&#xff0c;需要大于7.2 composer require phpoffice/phpspreadsheet3. 编写代码 <?php require vendo…

Vue3+.NET6前后端分离式管理后台实战(二十七)

1&#xff0c;Vue3.NET6前后端分离式管理后台实战(二十七)

017-GeoGebra基础篇-微积分函数求解圆弧面积问题

基础篇慢慢的走进尾声&#xff0c;今天给大家带来一个小项目&#xff0c;是关于高中数学微积分部分的展示&#xff0c;这个项目主要包含了函数的介绍、函数与图形绘制的区别、区域函数图像的绘制、积分函数的应用、动态文本的调用、嵌套滑动条的应用等等&#xff0c;以及其他常…

代理模式的实现

1. 引言 1.1 背景 代理模式&#xff08;Proxy Pattern&#xff09;是一种常用的设计模式&#xff0c;它允许通过一个代理对象来控制对另一个对象的访问。在面向对象编程的框架中&#xff0c;代理模式被广泛应用&#xff0c;尤其在Spring框架的AOP&#xff08;面向切面编程&am…

Python的招聘数据分析与可视化管理系统-计算机毕业设计源码55218

摘要 随着互联网的迅速发展&#xff0c;招聘数据在规模和复杂性上呈现爆炸式增长&#xff0c;对数据的深入分析和有效可视化成为招聘决策和招聘管理的重要手段。本论文旨在构建一个基于Python的招聘数据分析与可视化管理系统。 该平台以主流招聘平台为数据源&#xff0c;利用Py…

arm架构安装chrome

在ARM架构设备上安装谷歌软件或应用通常涉及到几个步骤&#xff0c;这取决于你要安装的具体谷歌产品&#xff0c;比如谷歌浏览器、Google Play服务或者是其他谷歌开发的软件。下面我会给出一些常见的指导步骤&#xff0c;以安装谷歌浏览器为例&#xff1a; 在Linux ARM64上安装…

平价蓝牙耳机推荐有哪些?四大超值平价蓝牙耳机品牌盘点

市面上的蓝牙耳机品牌繁多&#xff0c;价格差异巨大&#xff0c;对于预算有限但又不想牺牲音质和使用体验的消费者来说&#xff0c;寻找到既平价又性能出色的蓝牙耳机无疑是一项挑战&#xff0c;那么在平价蓝牙耳机推荐有哪些&#xff1f;面对这个疑问&#xff0c;作为真无线蓝…

【图解大数据技术】Hive、HBase

【图解大数据技术】Hive、HBase Hive数据仓库Hive的执行流程Hive架构数据导入Hive HBaseHBase简介HBase架构HBase的列式存储HBase建表流程HBase数据写入流程HBase数据读取流程 Hive Hive是基于Hadoop的一个数据仓库工具&#xff0c;Hive的数据存储在HDFS上&#xff0c;底层基于…

CSS - 深入理解选择器的使用方式

CSS基本选择器 通配选择器元素选择器类选择器id 选择器 通配选择器 作用&#xff1a;可以选中所有HTML元素。语法&#xff1a; * {属性名&#xff1b;属性值; }举例&#xff1a; /* 选中所有元素 */ * {color: orange;font-size: 40px; }在清除样式方面有很大作用 元素选择器…