副本集添加一个节点,不需要oplog也能数据同步?

lanbaibai 2014-04-17 09:03:02
我在本机架设了两个mongodb实例,一个端口30000,一个30001
这两个实例一开始不是副本集。
30000实例已经有了一部分数据,30001实例没有任何数据。
此时我进入30000实例,local库下面没有oplog.rs集合。
后来我把这两个实例架设成副本集,
之后,我发现30000实例的数据同步到30001实例。
而此时这两个实例的local库下面都有oplog.rs集合了,但是我执行db.oplog.rs.find(),发现只有设置副本集脚本的那一条记录。
没有oplog,我想问这数据是怎么同步过来的?
...全文
119 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
远航的TJ 2014-04-19
  • 打赏
  • 举报
回复
当你初始设置或者增加一个新的副本(30001)的时候,mongodb同步数据有下述3个步骤: 1) 副本的mongod在主本上执行一个table scan,把主本上所有的纪录复制过来。注意这个不是用oplog,而是直接query 然后insert。 假设开始时间是12:00:00 2) 全部复制完后,副本再把主本的oplog从12:00:00开始的部分复制过来然后在副本上执行那些oplog。这些oplog包括了同步开始以后的数据更新。 3) 重建所有的indexes 所以针对于那些在3000上的已有数据,你不会看到之前(开始同步之前)的oplog。

1,798

社区成员

发帖
与我相关
我的任务
社区描述
MongoDB相关内容讨论区
社区管理员
  • MongoDB社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧