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