其内容字段说明:

  • ts:操作日志的timestamp
  • t: 未知?
  • h:操作唯一随机值
  • v:oplog.rs的版本
  • op:操作类型:
    •   i:insert操作
    •   u:update操作
    •   d:delete操作
    •   c:command操作
    •   n:null操作
  • ns:名字空间:由 【db.collection】组成
  • o:操作日志文档内容
  • o2:操作查询条件,仅update有

----------------------------------------------------------------------------------------------------

那如何修改oplog.rs的大小呢?

  (个人猜测)mongodb在replication模式下,启动是会检测local下的几个相关collection,其中的oplog.rs就是本地的操作日志集合。

如果该集合存在,mongodb就不会考虑你的配置或命令选项中关于其大小的参数设置【replication.oplogSizeMB:n】的设置;否则,在第一次初始化replset时,根据该参数创建相关collection;而在其他人为配置有问题的情况下,报错启动失败!

  mongodb官方给出了不同版本下修改oplog.rs的方法,原则是:

  1. 滚动处理,先secondary,再到primary
  2. 处理primary时,先降级stepdown为secondary,让系统自行选出新的primary后,再处理

  本文,给出一个可能最便捷但可能不靠谱的方式,修改oplog.rs大小。其中的关键点:

  • 新的oplog.rs的大小必须在990m~50G之间,默认系统选择free-disk-space的5%作为默认值
  • 新的oplog.rs自然是capped的
  • 新的oplog.rs内必须添加一个文档记录: {ts: Timestamp(155555555,1), h: NumberLong("-35456346546456")}

  关键之处就在此,【ts、h】字段是必须的,其值只有合乎语法规范即可,当然为了保证replset运行逻辑的正确性,就必须仔细考虑了。

    1.   如果是secondary的话,应该是随便设置都可以的,只要比 replset.minvalid 小都可以
    2.   如果是primary的话(比如单节点replset),随便设置,因为根本不会启动同步源
    3.   如果是primary的话,后面跟着很多的secondary,理论上,必须还原修改大小之前的oplog.rs的内容,否则后果难以预料!这也是官方再三强调先降级为secondary角色再处理的原因!

操作命令:

use admin
rs.initiate({_id:"rset",members:[{_id:0,host:"127.0.0.1:27017"}]});
rs.initiate
(
{
"_id":"rset", #必须的,replset的名字
"members":[ #必须的
{
"_id":0, #必须的
"host":"127.0.0.1:27017" #必须的
}
]
}
); use local
db.temp.drop()
db.temp.save( db.oplog.rs.find( { }, { ts: 1, h: 1 } ).sort( {$natural : -1} ).limit(1).next() )
db.temp.find() use local ---- standalone
db.oplog.rs.renameCollection("oplog.rs.2")
db.createCollection("oplog.rs",{size:(3*1024*1024*1024),capped:1})
db.oplog.rs.insert({ts:Timestamp(1142268227, 1),h:NumberLong("-8215191208524156281")}) use test
for (i=1; i<=29999;i++) { db.tab.insert({c1:i});}
db.tab.count()

mongodb:修改oplog.rs 的大小size的更多相关文章

  1. MongoDB 修改数据Cannot change the size of a document in a capped collection: * != *"

    MongoDB修改数据库数据的时候报错 原因: 集合被设置成了 固定集合 .固定集合的数据不能被修改.只能查找-删除-再插入,也就是创建集合的时候设置了capped参数为true 解决: 创建集合的时 ...

  2. rolling方式修改oplog

    在 3.4之前版本 , 修改oplog 是一个非常麻烦的事情, 要停数据库 , rolling方式适合 3.4 之前版本修改oplog的大小 1. 配置文件注释 replSet2. 配置文件 oplo ...

  3. Android Studio 3.1.2 修改字体(font)大小(size) 及老版本修改主题、字体、颜色 参照地址

    Android Studio 3.1.2  修改字体(font)大小(size) 步骤:File-Settings-Editor-Color Scheme-Color Scheme Font-Size ...

  4. mongodb之 oplog 日志详解

    1:oplog简介 oplog是local库下的一个固定集合,Secondary就是通过查看Primary 的oplog这个集合来进行复制的.每个节点都有oplog,记录这从主节点复制过来的信息,这样 ...

  5. mongodb的oplog遇到的问题

    mongodb调整oplog的大小的方法 关闭当前服务器,将服务器以单机模式启动.这是一种方法,还有没有其他方法? mongodb实时扫描oplog,判断记录到哪个地方了 如果扫描oplog的程序挂掉 ...

  6. mongodb 修改oplogSize

    oplog是local库下的一个固定集合,Secondary就是通过查看Primary的oplog这个集合来进行复制的.每个节点都有oplog,记录从主节点复制过来的信息,这样每个成员都可以作为同步源 ...

  7. mongodb修改器

    mongodb修改器 转载自:http://blog.csdn.net/mcpang/article/details/7752736 mongodb修改器(\(inc/\)set/\(unset/\) ...

  8. 转:mongoDB 修改 ulimit

    转自:http://blog.yucanlin.cn/2015/03/23/mongodb-%E4%BF%AE%E6%94%B9-ulimit/ mongoDB 修改 ulimit 一切都源于mong ...

  9. 修改/dev/shm的大小

    修改/dev/shm的大小 修改/etc/fstab的这行: 默认的:tmpfs /dev/shm tmpfs defaults 0 0改成:tmpfs /dev/shm tmpfs defaults ...

随机推荐

  1. IO -阻塞,非阻塞, 同步,异步

    转载自: http://blog.csdn.net/historyasamirror/article/details/5778378 同步(synchronous) IO和异步(asynchronou ...

  2. 批量修改mysql数据库引擎

    数据库表中部分是MyISAM引擎,部分是InnoDB.由于MyISAM不支持事务,所以需要全部修改为InnoDB引擎. (下面例子SQL语句中 ecsoft 为数据库名) 通过以下查询可以看到数据库中 ...

  3. find命令查找包含指定内容的文件

    find / | xargs grep function 查找系统根目录下面的所有文件的内容中包含有function字符串的文件列表. find .|xargs grep xfind . -exec ...

  4. 在eclpse中 一个web project 引用多个 java project 的方法

    在开发时,我们会遇到一个需求:模块化.它要求我们把 业务组件进行拆分,分组.把一部分业务功能集中处理,以保证 部分功能块的独立,便于 分配任务到个人,确定人员职责,源代码管理,和发布时重组. 我们尝试 ...

  5. java jdbc preparedstatement 分析

    https://blog.csdn.net/xiong9999/article/details/54137326

  6. Visual Studio 2008 调试运行Bug记录

    1.VS2008LINK : fatal error LNK1000: Internal error during IncrBuildImage (1). 打开要编译的项目(2). 在项目菜单中打开属 ...

  7. 自然语言交流系统 phxnet团队 创新实训 项目博客 (九)

    项目技术总结: VoiceToText的具体使用方法: 语音转文本部分是调用的科大讯飞的在线语音,它的激发方式是按键,通过按钮触发开启安卓设备的录音,此部分需要在源码中写入关于安卓权限的要求,来调用安 ...

  8. altium designer中如何添加logo

    在PCB板卡制作完毕,为了彰显自己的成就感,可以在PCB空白区域添加几个logo或者说明性的英文(就不要中文了,中文可能PCB厂家做不了). 上图是笔者喜欢在空白区域加一个个性化的二维码,算作是对自己 ...

  9. Navdeep Jaitly

    中文名:耐迪普 杰特尼 早期: 印度科技大学 1994-1995 滑铁卢大学 1998-2000 博士: 多伦多大学 Hinton实验室 2008-2014 工作: 谷歌大脑 2014-2017 英伟 ...

  10. 通过用户名、密码提交的方式搭建私有git服务端

    1. 系统环境 centos git yum -y install git 2).创建属于自己的git库 mkdir /myGit git init --bare xiangyun.git 3). 添 ...