mongodb系列~oplog

一 oplog基本格式
   0 ts-> 日志时间戳(选举根据最新的日志时间戳)
   1 h->操作的全局唯一标识(也是时间戳)
   2 ns->db.collcetion(具体的集合元信息)
   3 ui->表示当前登录用户的会话 id 值(uuid值形式)
   4 wall->表示该操作的执行时间,utc时间。
   5 op-> 具体的操作命( i-insert,u-update,d-delete,c-db cmd(比如drop)))
   6 o->对应的document:
      0 针对数据的变更都包含唯一_id,数据变更依赖的就是_id
      1 insert包含_id和具体插入内容
      2 delete包含_id
      3 update包含具体更新操作 0-2包含_id
      4 db_cmd包含具体的命令
  二 oplog窗口时间
      1 oplog中最旧和最新条目之间的时间间隔  
      2 oplog大小是固定的,所以窗口时间不固定,因为单位时间内写入的条数并不是恒定的
      3 查看oplog命令
         db.getReplicationInfo()  
         "logSizeMB" : 1800, 设置的大小
         "usedMB" : 0.01,       应用的大小
         "timeDiff" : 471,         第一次和最新一次的相差秒数
         "timeDiffHours" : 0.13, 第一次和最新一次的相差时间数
          "tFirst" : "Mon Aug 23 2021 14:37:21 GMT+0800 (CST)", 最早的oplog
          "tLast" : "Mon Aug 23 2021 14:45:12 GMT+0800 (CST)",  最新的oplog
          "now" : "Mon Aug 23 2021 14:45:16 GMT+0800 (CST)"    现在的时间
  三 oplog 更改大小(小于3.6)
       1 关闭从节点mongod 然后去掉repl参数,以单节点方式启动
       2  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() 删除
           db.runCommand( { create: "oplog.rs", capped: true, size: (20 * 1024 * 1024 * 1024) } ) #新建
           db.oplog.rs.save( db.temp.findOne() )  #导入 
        3 加入repl参数 重启mongod节点,以从节点方式加入启动
   四 oplog更改大小(大于3.6)
        在集群每个成员分布执行 db.adminCommand({replSetResizeOplog: 1, size: XXMB})
        1 推荐先更改从节点再更改主节点
        2 更改完会立刻输出getReplicationInfo()的输出结果
   五 备份应用
       1 dump备份添加--oplog 这样备份的有效期就在备份的结束那一刻 但是注意只能应用全库备份的情况下
       2 restore恢复添加 --oplogReplay
          

 

 
         
          

原文地址:https://www.cnblogs.com/danhuangpai/p/15167949.html