转载地址:http://blog.csdn.net/huwei2003/article/details/43307647

修改mongodb oplog size

oplog简介:

oplog:operations log的简写,存储在一个特殊的数据库中(local),oplog就存储在其中的oplog.$main集合里面,这个集合是一个固定集合,新操作会自动替换旧的操作,以保证oplog不会超过预设的大小,其中的每个文档都代表主节点上执行的一个操作,oplog会包含所有对数据有修改的的操作(查询操作不会记录),默认下,oplog大小会占用64位的实例5%的可用磁盘空间。
mongo复制的过程:主节点应用业务操作修改到数据库中,然后记录这些操作到oplog中,从节点复制这些oplog,然后应用这些修改。ps:这些操作是异步的。如果从节点的操作已经被主节点落下很远,oplog日志在从节点还没执行完,oplog可能已经轮滚一圈了,从节点跟不上同步,复制就会停下,从节点需要重新做完整的同步,为了避免此种情况,尽量保证主节点的oplog足够大,能够存放相当长时间的操作记录。

查询oplog的大小及保存的操作记录持续的时长

repltest:PRIMARY> db.printReplicationInfo()
configured oplog size:   1024MB
log length start to end: 3705secs (1.03hrs)
oplog first event time:  Thu Oct 10 2013 11:13:29 GMT+0800 (CST)
oplog last event time:   Thu Oct 10 2013 12:15:14 GMT+0800 (CST)
now:                     Fri Oct 11 2013 16:33:42 GMT+0800 (CST)

查询从节点的数据源列表,其中有数据滞后的时间

repltest:PRIMARY> db.printSlaveReplicationInfo()
source:   192.168.1.101:37017
syncedTo: Fri Oct 11 2013 16:38:16 GMT+0800 (CST)
= 1 secs ago (0hrs)
source:   192.168.1.100:37017
no replication info, yet.  State: ARBITER
so,修改oplog的大小:(下面介绍两种方式)

方式一:

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

1:重启一个实例以单机模式,

通常再关闭server之前,使用rs.stepDown() 强制primary成为secondary

2:重新创建一个新大小,

其中包含旧的oplgo的入口条目的oplog

3:重启mongod作为replica set的成员

操作步骤:
1>: Restart a Secondary in Standalone Mode on a Different Port
关闭mongod实例:
repset:PRIMARY> use admin
repset:PRIMARY> db.shutdownServer()
重启mongod实例以单机模式,修改端口,并不要加--replSet参数
#vim /etc/mongo.conf
  dbpath=/var/lib/mongodb
  logpath=/var/log/mongodb/mongo.log
  pidfilepath=/var/run/mongo.pid
  directoryperdb=true
  logappend=true
  #replSet=repset
  bind_ip=192.168.1.100,127.0.0.1
  port=37017
  oplogSize=2000
  fork=true# mongod -f /etc/mongo.conf
备份oplog# mongodump --db local --collection 'oplog.rs' --port 37017
2>: Recreate the Oplog with a New Size and a Seed Entry
保存oplog的最新的时间点
> use local
> db.temp.save( db.oplog.rs.find( { }, { ts: 1, h: 1 } ).sort( {$natural : -1} ).limit(1).next() )
> db.temp.find()
删除旧的oplog
> db.oplog.rs.drop()
3> :Create a New Oplog
创建一个新的Oplog,大小为2G
> db.runCommand( { create: "oplog.rs", capped: true, size: (2 * 1024 * 1024 * 1024) } )
插入前面保存的旧的oplog的时间点的记录
> db.oplog.rs.save( db.temp.findOne() )
> db.oplog.rs.find()
4>:Restart the Member:
关闭单机实例:
> use admin
> db.shutdownServer()
修改回配置# vim /etc/mongo.conf
  dbpath=/var/lib/mongodb
  logpath=/var/log/mongodb/mongo.log
  pidfilepath=/var/run/mongo.pid
  directoryperdb=true
  logappend=true
  replSet=repset
  bind_ip=192.168.1.100,127.0.0.1
  port=37017
  oplogSize=2000
  fork=true
启动mongod
# mongod -f /etc/mongo.conf
重复上述步骤到所有需要更改的节点。

方式二:

步骤:
1:停掉所有replca set节点.
2:主节点删除local库下的文件,从节点删除数据目录下所有文件.
3:修改所有节点配置文件.
4:重启所有节点.
5:重新配置replca set,从节点会重新同步所有数据(initial sync).
ps:此法好处是简单,但需要停掉服务,且如果数据量很大,初始同步的成本较高

1>:关闭mongod实例(所有节点)

> use admin
> db.shutdownServer()

2>:删除local数据库下的所有文件(PRIMARY节点)

# rm -rf /var/lib/mongodb/local/*
  删除mongo数据目录(其他节点上操作,可不要删错哦,建议所有rm操作先mv,待无问题时候再删除)# rm -rf /var/lib/mongodb/*

3> 修改所有节点配置文件(oplogsize)

# vim /etc/mongo.conf
  dbpath=/var/lib/mongodb
  logpath=/var/log/mongodb/mongo.log
  pidfilepath=/var/run/mongo.pid
  directoryperdb=true
  logappend=true
  replSet=repset
  bind_ip=192.168.1.100,127.0.0.1
  port=37017
  oplogSize=2000
  fork=true

4> 重启所有节点mongod

> mongod -f /etc/mongo.conf

修改mongodb oplog size相关推荐

  1. Increasing the OpLog Size in MongoDB(don't need full resync)

    OpLog用于MongoDB数据库复制场合,特征: 1. 设置容量上限, 2. 循环使用 3. local数据库专用 对于MongoDB来说设置好适当的OpLog上限是非常有必要的,因为加大OpLog ...

  2. mongo 改字段名_一日一技:修改MongoDB集合中的字段名

    一日一技:修改MongoDB集合中的字段名 一日一技是一个每天更新的栏目,旨在使用3分钟的时间让你每天都有新的进步. 在我们使用MongoDB的过程中,经常会出现修改数据的情况.我们一般使用 upda ...

  3. 修改MongoDB密码

    修改MongoDB密码 禁用管理员(root)密码 1.找到配置文件mongod.conf,并进入 vim /etc/mongod.conf 2.禁用管理员(root)密码 找到: security: ...

  4. 修改MONGODB 最大连接数

    问题: 今天PHP 测试端出错.不知是否为MONGODB的问题.测试最时而正常,刷新多次后就出错. 想到是否为连接次数的原因呢,所以想到把最大连接数修改后,再让他们测试一下,是否问题依旧. 修改方法: ...

  5. 修改oracle+sga+size,oracle自动内存共享管理测试。修改 oracle 11g SGA_MAX_SIZE。

    目的,使用oracle 自动内存共享管理 基本都是修改过程.如需整理,请留言 SQL>show parameters target; NAME                           ...

  6. 修改mongodb最大查询数_关于MongoDB最大连接数的查看与修改

    在Linux平台下,无论是64位或者32位的MongoDB默认最大连接数都是819,WIN平台不知道,估计也没有人在 WIN平台下使用MongoDB做生产 在Linux平台下,无论是64位或者32位的 ...

  7. 修改mongodb最大查询数_WebFlux系列(十二)MongoDB应用,新增、修改、查询、删除

    #Java#Spring#SpringBoot#Mongo#reactor#webflux#数据库#新增#修改#查询#删除# Spring Boot WebFlux Mongo数据库新增.删除.查询. ...

  8. mongodb服务器怎么修改,MongoDB修改数据的2种方法

    在MongoDB中,db.collection.ipdate()和db.collection.save()方法都可以修改集合中已存在的文档.db.collection.update()方法对修改提供额 ...

  9. ubuntu修改mongodb的数据库储存位置

    文章目录 查看并更改datadir储存路径 转移datadir 给权限和所有者 重启mongodb 启动mongo查看 查看并更改datadir储存路径 如果是默认安装,该配置文件路径可以用locat ...

  10. 修改mongodb最大查询数_mongodb数据库如何查询某个字段的最大值?

    展开全部 1.select distinct(类型抄 ),(select max(单价) from table where 类型 =c.类型 ) from table c. 2.举例bai: pers ...

最新文章

  1. 风电功率预测matlab,一种基于二十四节气的风电功率预测方法与流程
  2. 【Android】开发优化之——调优工具:TrackView,Method Profiling
  3. 地理(GIS)教学神器:气象地球生成器
  4. 基于Java+SpringBoot+vue+element等动物救助平台设计和实现
  5. cms 移动根节点到根节点中的子节点,根节点消失解决办法
  6. Bellman-ford算法与Dijkstra算法(RIP和OSPF的基本算法)
  7. linux网络总线的作用,I2C总线是什么?基于I2C总线的Linux系统有哪些优点?
  8. Leetcode376.摆动序列
  9. 【图像隐写】基于matlab GUI变换域的可逆数字水印系统设计【含Matlab源码 1813期】
  10. mysql多表条件查询,mysql实现RBAC权限管理sql语句详解
  11. 降了还是涨了?瓶装水市场再秀迷幻操作
  12. wc与xargs命令
  13. 计算机金额函数,Excel数字转大写金额方法 一个隐藏函数搞定
  14. 苹果手机导出照片到电脑上
  15. 在python中使用matplotlib画简单折线图
  16. java在线答题系统,上岸蚂蚁金服!
  17. python arduino i2c1602_Arduino 将1602液晶显示屏改造为IIC接口
  18. 引用---单引号,双引号和反斜杠
  19. 【UE4】【笔记】7、照明阴影和后期处理
  20. springcloud gateway断路器抛的错default failed and fallback disabled

热门文章

  1. 使用jekins自动构建部署java maven项目(jdk1.7+tomcat7.0+jenkins2.19.3)
  2. C# 输出流转化成输入流操作XML
  3. 我的第一篇CBBLOGS博客
  4. 节点文件将两个不同格式的XML文件,进行节点对照,并生成一个用于对照功能的XML...
  5. 如何修改docker swarm节点的hostname
  6. 快读代码level.2
  7. [Windows]GFlag内存泄漏排查
  8. JS内置对象练习(慕课网题目)
  9. 【深度学习】之Caffe的solver文件配置(转载自csdn)
  10. BZOJ_1003_[ZJOI2006]_物流运输_(动态规划+最短路)