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数据库常用的10条操作命令
Jun 18 MongoDB
MongoDB orm框架的注意事项及简单使用
Jun 20 MongoDB
详解MongoDB的条件查询和排序
Jun 23 MongoDB
常用的MongoDB查询语句的示例代码
Jul 25 MongoDB
mongodb的安装和开机自启动详细讲解
Aug 02 MongoDB
MongoDB日志切割的三种方式总结
Sep 15 MongoDB
MongoDB连接数据库并创建数据等使用方法
Nov 27 MongoDB
MongoDB使用场景总结
Feb 24 MongoDB
剖析后OpLog订阅MongoDB的数据变更就没那么难了
Feb 24 MongoDB
MongoDB支持的索引类型
Apr 11 MongoDB
MongoDB修改oplog大小的四种方法
Apr 11 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中使用socket方式GET、POST数据实例
2015/04/02 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
JavaScript获得选中文本内容的方法
2008/12/02 Javascript
JQuery从头学起第一讲
2010/07/04 Javascript
基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
2013/04/26 Javascript
js之ActiveX控件使用说明 new ActiveXObject()
2014/03/03 Javascript
js处理自己不能定义二维数组的方法详解
2014/03/03 Javascript
javascript实现图片上传前台页面
2015/08/18 Javascript
jQuery移动端图片上传组件
2016/06/12 Javascript
最常见和最有用的字符串相关的方法详解
2017/02/06 Javascript
Vuex和前端缓存的整合策略详解
2017/05/09 Javascript
jQury Ajax使用Token验证身份实例代码
2017/09/22 Javascript
Vue2.0 实现单选互斥的方法
2018/04/13 Javascript
JS 使用 window对象的print方法实现分页打印功能
2018/05/16 Javascript
vue debug 二种方法
2018/09/16 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
关于JS模块化的知识点分享
2019/10/16 Javascript
Python实现简单状态框架的方法
2015/03/19 Python
python实现2048小游戏
2015/03/30 Python
python实现类的静态变量用法实例
2015/05/08 Python
Python MD5加密实例详解
2017/08/02 Python
python简单商城购物车实例代码
2018/03/15 Python
Django使用AJAX调用自己写的API接口的方法
2019/03/06 Python
基于树莓派的语音对话机器人
2019/06/17 Python
Python中输入和输出(打印)数据实例方法
2019/10/13 Python
Python selenium模拟手动操作实现无人值守刷积分功能
2020/05/13 Python
PythonPC客户端自动化实现原理(pywinauto)
2020/05/28 Python
Python实现中英文全文搜索的示例
2020/12/04 Python
CSS3.0实现霓虹灯按钮动画特效的示例代码
2021/01/12 HTML / CSS
世界上最大的专业美容用品零售商:Sally Beauty
2017/07/02 全球购物
美国LOGO设计公司:The Logo Company
2018/07/16 全球购物
运动会解说词50字
2014/01/18 职场文书
社区党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
优秀教师先进事迹材料
2014/12/15 职场文书
2016年师德师风学习心得体会
2016/01/12 职场文书
【海涛dota解说】一房久违的影魔魂守二连发
2022/04/01 DOTA