MongoDB修改oplog大小的四种方法


Posted in MongoDB onApril 11, 2022

修改oplog有四种方法:

方法一

步骤如下:

  • 停掉所有secondary节点
  • 主节点删除local目录下文件,副本节点删除数据目录下所有文件
  • 修改所有节点的配置文件,如:oplogSize=1000
  • 重启所有节点,包括主节点和副本节点
  • 重新配置replca set,副本节点会重新同步数据(initial sync)

优点:操作简单。
缺点:需要停服务,若数据量大,数据同步代价高。

方法二

步骤如下:

  • remove其中一个secondary节点,并关闭mongod服务,删除数据目录下所有文件
  • 修改此节点的参数文件,如:oplogSize=1000,并启动mongod服务
  • 在primary节点执行rs.add()将此节点加入到replica set
  • 循环1-3步骤,将所有副本节点全部改完
  • primary节点执行rs.stepDown()将主节点降级为副本节点
  • 从新的主节点remove掉此节点,并进行步骤1-3
    这样逐个修改每个节点,完成oplog修改。

优点:解决了方法一中的停机问题。
缺点:每个节点都要逐个重新同步,时间代价更高。

方法三

The oplog exists internally as a capped collection, so you cannot modify its size in the course of normal operations.另:改变oplog大小,需要在每个节点上执行维护模式。(官方推荐)

1.关闭mongod

关闭mongod实例,如果是primary节点,执行rs.stepDown() 降级

handong1:PRIMARY> rs.stepDown()
{
	"ok" : 1,
	"$clusterTime" : {
		"clusterTime" : Timestamp(1619693040, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	},
	"operationTime" : Timestamp(1619693040, 1)
}
handong1:SECONDARY> 
handong1:SECONDARY> 
handong1:SECONDARY> 
handong1:SECONDARY> use admin
switched to db admin
handong1:SECONDARY> db.shutdownServer()
2021-04-29T18:44:33.947+0800 I  NETWORK  [js] DBClientConnection failed to receive message from 127.0.0.1:27017 - HostUnreachable: Connection closed by peer
server should be down...
2021-04-29T18:44:33.950+0800 I  NETWORK  [js] trying reconnect to 127.0.0.1:27017 failed
2021-04-29T18:44:33.967+0800 I  NETWORK  [js] reconnect 127.0.0.1:27017 failed failed

2.修改配置文件

修改配置文件,修改端口,注释掉replSet和认证相关的设置

port=27018
fork=true
journal = true
maxConns=500
logappend=true
directoryperdb=true
dbpath=/mongodb/data
logpath=/mongodb/logs/mongodb.log

3.启动mongod实例,并备份oplog

mongod -f /mongodb/conf/mongodb.conf 
about to fork child process, waiting until server is ready for connections.
forked process: 31553
child process started successfully, parent exiting
mongodump -d local -c oplog.rs --port 27018 -h 172.16.254.134 -o /mongodb/backup
2021-04-29T18:55:18.167+0800	writing local.oplog.rs to /mongodb/backup/local/oplog.rs.bson
2021-04-29T18:55:18.170+0800	done dumping local.oplog.rs (798 documents)

4.重建oplog

保存oplog最新时间点

> use local
switched to db local
> db.temp.save( db.oplog.rs.find( { }, { ts: 1, h: 1 } ).sort( {$natural : -1} ).limit(1).next() )
WriteResult({ "nInserted" : 1 })
> db.temp.find()
{ "_id" : ObjectId("608a914089abaa981f14e888"), "ts" : Timestamp(1619693066, 1), "h" : NumberLong(0) }

删除旧的oplog

db.oplog.rs.drop()

重建新的oplog,大小为2GB

> db.runCommand( { create: "oplog.rs", capped: true, size: (2 * 1024 * 1024 * 1024) } )

5.插入前面保存的oplog时间点记录

> db.oplog.rs.save( db.temp.findOne() )
> db.oplog.rs.find()

6.关闭mongod实例

> use admin
switched to db admin
> db.shutdownServer()
2021-04-29T19:06:53.745+0800 I  NETWORK  [js] DBClientConnection failed to receive message from 127.0.0.1:27018 - HostUnreachable: Connection closed by peer
server should be down...
2021-04-29T19:06:53.749+0800 I  NETWORK  [js] trying reconnect to 127.0.0.1:27018 failed
2021-04-29T19:06:53.749+0800 I  NETWORK  [js] reconnect 127.0.0.1:27018 failed failed

最后恢复mongodb.conf到初始状态,启动

方法四

如果你的MongoDB版本为4.0以后的版本,可以直接使用replSetResizeOplog修改。

1.查看oplog大小

handong1:SECONDARY> db.getReplicationInfo()
{
	"logSizeMB" : 1000,
	"usedMB" : 0.17,
	"timeDiff" : 6736,
	"timeDiffHours" : 1.87,
	"tFirst" : "Thu Apr 29 2021 17:19:14 GMT+0800 (CST)",
	"tLast" : "Thu Apr 29 2021 19:11:30 GMT+0800 (CST)",
	"now" : "Thu Apr 29 2021 19:11:42 GMT+0800 (CST)"
}

2.修改oplog大小

handong1:SECONDARY> db.adminCommand({replSetResizeOplog:1,size:2000})
{
	"ok" : 1,
	"$clusterTime" : {
		"clusterTime" : Timestamp(1619694744, 14),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	},
	"operationTime" : Timestamp(1619694744, 14)
}

3.验证oplog大小

handong1:SECONDARY> db.getReplicationInfo()
{
	"logSizeMB" : 2000,
	"usedMB" : 0.18,
	"timeDiff" : 6852,
	"timeDiffHours" : 1.9,
	"tFirst" : "Thu Apr 29 2021 17:19:14 GMT+0800 (CST)",
	"tLast" : "Thu Apr 29 2021 19:13:26 GMT+0800 (CST)",
	"now" : "Thu Apr 29 2021 19:13:28 GMT+0800 (CST)"
}

4.整理碎片,回收空间(可选)

handong1:SECONDARY> use local
switched to db local
handong1:SECONDARY> db.runCommand({"compact" : "oplog.rs"})
{
	"ok" : 1,
	"$clusterTime" : {
		"clusterTime" : Timestamp(1619694840, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	},
	"operationTime" : Timestamp(1619694840, 1)
}

到此这篇关于分享MongoDB修改oplog大小的4种方法的文章就介绍到这了,更多相关MongoDB修改oplog大小内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MongoDB 相关文章推荐
MongoDB数据库的安装步骤
Jun 18 MongoDB
MongoDB数据库常用的10条操作命令
Jun 18 MongoDB
MongoDB orm框架的注意事项及简单使用
Jun 20 MongoDB
Mongo服务重启异常问题的处理方法
Jul 01 MongoDB
mongodb的安装和开机自启动详细讲解
Aug 02 MongoDB
阿里云服务器部署mongodb的详细过程
Sep 04 MongoDB
MongoDB连接数据库并创建数据等使用方法
Nov 27 MongoDB
MongoDB误操作后使用oplog恢复数据
Apr 11 MongoDB
MongoDB支持的索引类型
Apr 11 MongoDB
MongoDB修改oplog大小的四种方法
Apr 11 MongoDB
Centos系统通过Docker安装并搭建MongoDB数据库
Apr 12 MongoDB
NoSQL优缺点与MongoDB数据库简介
Jun 05 MongoDB
MongoDB支持的索引类型
Apr 11 #MongoDB
MongoDB支持的数据类型
Apr 11 #MongoDB
MongoDB误操作后使用oplog恢复数据
Apr 11 #MongoDB
mongoDB数据库索引快速入门指南
MongoDB数据库部署环境准备及使用介绍
一次线上mongo慢查询问题排查处理记录
Mar 18 #MongoDB
SpringBoot 整合mongoDB并自定义连接池的示例代码
Feb 28 #MongoDB
You might like
PHP集成FCK的函数代码
2008/09/27 PHP
header中Content-Disposition的作用与使用方法
2012/06/13 PHP
php查询内存信息操作示例
2019/05/09 PHP
jquery获取div宽度的实现思路与代码
2013/01/13 Javascript
JavaScript中使用Substring删除字符串最后一个字符
2013/11/03 Javascript
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
基于jQuery实现的菜单切换效果
2015/10/16 Javascript
javascript合并表格单元格实例代码
2016/01/03 Javascript
DropDownList控件绑定数据源的三种方法
2016/12/24 Javascript
Nodejs 发送Post请求功能(发短信验证码例子)
2017/02/09 NodeJs
Vue中的ref作用详解(实现DOM的联动操作)
2017/08/21 Javascript
JavaScript数组去重的多种方法(四种)
2017/09/19 Javascript
如何在vue项目中嵌入jsp页面的方法(2种)
2020/02/06 Javascript
解决Vue + Echarts 使用markLine标线(precision精度问题)
2020/07/20 Javascript
解决Vue-Router升级导致的Uncaught (in promise)问题
2020/08/07 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
python检测lvs real server状态
2014/01/22 Python
Python获取运行目录与当前脚本目录的方法
2015/06/01 Python
python实现域名系统(DNS)正向查询的方法
2016/04/19 Python
Python文本相似性计算之编辑距离详解
2016/11/28 Python
教你学会使用Python正则表达式
2017/09/07 Python
mac PyCharm添加Python解释器及添加package路径的方法
2018/10/29 Python
Python之使用adb shell命令启动应用的方法详解
2019/01/07 Python
对Python使用mfcc的两种方式详解
2019/01/09 Python
django ManyToManyField多对多关系的实例详解
2019/08/09 Python
Python读写文件模式和文件对象方法实例详解
2019/09/17 Python
python3使用GUI统计代码量
2019/09/18 Python
python模块如何查看
2020/06/16 Python
python实现简单的井字棋游戏(gui界面)
2021/01/22 Python
域名注册、建站工具、网页主机、SSL证书:Dynadot
2017/01/06 全球购物
英国HYPE双肩包官网:英国本土时尚潮牌
2018/09/26 全球购物
如何清空Session
2015/02/23 面试题
大学活动总结模板
2014/07/10 职场文书
狂人日记读书笔记
2015/06/30 职场文书
《司马光》教学反思
2016/02/22 职场文书
JS实现简单的九宫格抽奖
2022/06/28 Javascript