logo

说明
本软件免费使用。
免责申明
使用前请先测试,使用本软件造成一切后果与本社区及本人无关。
许可证
目前使用Apache Licene 2.0

mongosync下载地址:
http://dl.nosqldb.org/mongosync
使用手册:
http://dl.nosqldb.org/mongosync_user_guide_zh_CN.pdf

默认认证admin库。
mongosync是什么
mongosync是用于MongoDB复制集之间,复制集到分片集群之间以及分片集群与分片集群之间同步数据的一个工具。

mongosync使用场景
1.实时迁移,尤其是从一个集群迁移到另一个集群,或者master-slave架构迁移到replica sets架构
2.实时同步,比如同步数据到其他集群。
3.其他场景

mongosync特点及功能增强
1.极速(ssd环境最大能达到百万每秒)、易用;
2.支持全量同步,增量同步,支持同步单库、单集合;
3.支持实时监测数据的变化并同步,类似tail -f效果,即使在同步过程中及以后新产生的数据也能同步到目标库;
4.支持MongoDB 1.8.x,MongoDB 2.0.x,MongoDB 2.4.x版本的同步,
支持master-slave到replica sets架构的同步,
支持replica sets到replica sets架构的同步,
支持replica sets到sharding cluster的同步;

集群间实时迁移方法

直接使用mongosync 全量同步+增量同步功能同步数据到目标库(—oplog参数)

几个使用方法:
全量同步

mongosync -h 10.0.4.91:27017 -u admin -p 123 --to 10.0.4.91:27020 --tu admin --tp 456

增量同步

mongosync -h 10.0.4.91:27017 -u admin -p 123 --to 10.0.4.91:27020 --tu admin --tp 456 --oplog -s 1369406664,1  

“初始化”同步(全量+增量+实时)

mongosync -h 10.0.4.91:27017 -u admin -p 123 --to 10.0.4.91:27020 --tu admin --tp 456 --oplog 

同步一段时间范围内的数据

mongosync -h 10.0.4.91:27017 -u admin -p 123 --to 10.0.4.91:27020 --tu admin --tp 456 --oplog -s 1369811325,1 -t 1369811373,1 

支持平台:
x86-64 centos 6.x


ccj 于 2015-10-04 12:39 修改
53 回复
Hisoka-J
#1 Hisoka-J • 2013-07-23 10:50

同时完整支持同步到分片集群mongos 这个是什么意思?是说我能从一个mongos同步到另一个mongos?还是说我能把mongos下的一个分片同步出来?

ccj
#2 ccj • 2013-07-23 14:08

只支持目标库mongos,源库肯定只能是复制集(主库或者从库)。

Hisoka-J
#3 Hisoka-J • 2013-07-23 15:30

@ccj 是说支持从rs迁移到sh啦?那也不错!

ccj
#4 ccj • 2013-08-12 11:56

@Hisoka 新版1.4.0 支持源库是mongos了。

Hisoka-J
#5 Hisoka-J • 2013-08-12 12:15

@ccj 太帅了啊!我去试用!有问题的话反馈给你。

yinyi123
#6 yinyi123 • 2013-08-30 15:47

有没有这种情况:Replica Sets 备份的缺点,当主服务器发生故障时,一台从服务器被投票选

为了主服务器,但是这台从服务的oplog 如果晚于之前的主服务器oplog的话,那之前的主服

务器恢复后,会回滚自己的oplog操作和新的主服务器oplog保持一致。由于这个过程是自动

切换的,所以在无形之中就导致了部分数据丢失。

如果有楼主,能不能给点意见!

yinyi123
#7 yinyi123 • 2013-09-02 13:06

楼主您好:进过测试我的master-slave 与repl sets 之间的同步测试,测试情况发生,当主从上面创建一个集合,集合中的文档为200条记录 就同步不过,把集合记录修改成100条,在去同步就成功了,希望楼主解惑。 附截图: enter image description here

enter image description here

enter image description here enter image description here

我的是在一台 电脑上面做的,我的磁盘空间也是够的,我的mongodb是64bit

Hisoka-J
#8 Hisoka-J • 2013-09-04 15:40

@ccj 我目前还在用1.0.3,很好用

ccj
#9 ccj • 2013-09-12 16:12

1.4.2已经修复此bug.

Hisoka-J
#10 Hisoka-J • 2013-09-22 15:54

@ccj 1.4.2复制较多数据时出现从库追不上主库的情况,似乎是从库的同步延迟较大,而主库的oplog写一了一圈。导致最终从库同步中断。

zeratul
#11 zeratul • 2013-09-30 17:38

楼主,只能下载到1.0.3了。新的呢????求地址,工具比较好用赞一个!!

ccj
#12 ccj • 2013-09-30 20:10

不是啊,目录里面的mongosync就是1.4.2的啊

zeratul
#13 zeratul • 2013-10-11 11:44

@ccj 。。。谢谢

houxuan
#14 houxuan • 2013-10-11 12:12

@ccj 楼主好。代码会开源吗?

ccj
#15 ccj • 2013-10-11 14:17

@houxuan 短期内可能不现实,有以下原因: 目前大家主要是使用方面,开发方面没有人参与,开源意义不太大,且需要更多经历维护。 如果是有兴趣参与或者需要,可私下交流。 另外,源码有部分已经放在 https://github.com/nosqldb/mongodb

Hisoka-J
#16 Hisoka-J • 2013-10-30 12:04

啥时候更新下dump!

xmbbx
#17 xmbbx • 2013-11-19 11:31

能否弄一个centos5版本的,操作系统版本比较低,谢了。

ccj
#18 ccj • 2013-11-19 11:32

下载目录里有个 Previous_Releas… > 1.0.3 版本里面有centos5的

yinyi123
#19 yinyi123 • 2013-11-21 09:54

问下支持主从到主从的集群同步吗?

ccj
#20 ccj • 2013-11-21 10:19

支持!

xbsura
#21 xbsura • 2014-01-17 14:50

是否安全写入?测试看速度貌似不是安全写入,不安全写入是否会发生数据丢失,怎么处理的?同步oplog是否采用读出oplog再向目标集群应用的方式?

开源嘛哥哥。

xbsura
#22 xbsura • 2014-01-17 14:53

tokumx不支持带有oplog_replay时尾部查找,extent查找的优化,ts格式的变化,ops的格式变化,这个同步有没有兼容。

开源嘛哥哥。

xbsura
#23 xbsura • 2014-01-17 14:55

有没有考虑多线程乱序应用oplog,单线程安全写入同步速度太低了,会不会跟不上?

开源嘛哥哥。

ccj
#24 ccj • 2014-01-17 17:02

默认是安全写的,从没有数据丢失过。开源倒不是大问题,主要开源就得花经历去维护。

ccj
#25 ccj • 2014-01-17 17:09

tokumx把oplog.rs改成了非capped collection,但是是tailable的,可以尾部查找的。 oplog格式是变化不少(有原因的),这个同步打算让他们自己去写好了,有需要就催催他们几个家伙。

ccj
#26 ccj • 2014-01-17 17:11

你可以先试一下,单线程也足够快了,如果真有需要,再考虑改成多线程。

Sean905
#27 Sean905 • 2014-02-24 10:39

大家好 小弟 127.0.0.1:30000 這一組mongos有驗證 172.16.10.10:30000 這一組為不使用驗證 出現以下錯誤

[root@centOS6 ~]# ./mongosync -h 127.0.0.1:30000 –to 172.16.10.10:30000 connected to: 127.0.0.1:30000 Mon Feb 24 05:29:13.800 [mongosync] 127.0.0.1:30000 connected ok Mon Feb 24 05:29:13.896 [mongosync] admin auth ok Mon Feb 24 05:29:13.897 [mongosync] 172.16.10.10:30000 connected ok Mon Feb 24 05:29:13.907 [mongosync] admin auth ok Mon Feb 24 05:29:13.921 [mongosync] stop balancer Mon Feb 24 05:29:13.933 [mongosync] Assertion: 13111:field not found, expected type 2 0xc26d66 0xbf1879 0xbf199c 0x710cb0 0xbef3d2 0x7007b5 0x7fc232d33d1d 0x700209 ./mongosync(_ZN5mongo15printStackTraceERSo+0x26) [0xc26d66] ./mongosync(_ZN5mongo11msgassertedEiPKc+0xa9) [0xbf1879] ./mongosync() [0xbf199c] ./mongosync(_ZN5_sync3runEv+0x3380) [0x710cb0] ./mongosync(_ZN5mongo4Tool4mainEiPPc+0xb32) [0xbef3d2] ./mongosync(main+0x35) [0x7007b5] /lib64/libc.so.6(__libc_start_main+0xfd) [0x7fc232d33d1d] ./mongosync() [0x700209] assertion: 13111 field not found, expected type 2

ccj
#28 ccj • 2014-02-24 12:35

@Sean905 1.5版本为了方便,改成要么都不用认证,要么都用认证,如果需要的话,可以先用之前的版本(下载目录里Previous_Release 1.4.4).而且你没有写参数用户名密码 -u -p 怎么认证

ccj
#29 ccj • 2014-04-01 13:54

更新版本,改进了分片同步; 更改实时同步部分log显示。

Hisoka-J
#30 Hisoka-J • 2014-04-01 16:54

应该在标题加个版本号

shuanghu
#31 shuanghu • 2014-10-26 19:45

请问一下,如果我在同步过程中,把目的mongod关了,发现崩溃了,我再重新全量同步,发现也找不到那条数据了,这是怎么回事呀?

ccj
#32 ccj • 2014-10-27 10:24

@shuanghu 全量重新同步是可以的。最好把之前的数据删掉。找不到哪条?

shuanghu
#33 shuanghu • 2014-10-27 15:43

@ccj 我再描述下我的问题吧,我从A主机向B主机增量同步数据,这个时候,我把B主机的mongod给关了,这时候我向A里面插入一条数据{”_id” : -5223256483109662170,}然后,工具崩溃了。我把工具再重启进行全量同步,发现B里面没有找到{”_id” : -5223256483109662170}这条数据。我想问下,这条数据,我想从A同步到B,该如何同步?然后,mongosync会记录状态嘛?谢谢。

ccj
#34 ccj • 2014-10-27 20:56

@shuanghu 1. 全量同步完了才能看数据啊。 2. 增量同步中段了可以接上(加-s参数)

giantmangu888
#35 giantmangu888 • 2015-05-21 19:18

mongosync 1.6.7不支持mongodb3.0实时迁移,是么 求支持mongodb3.0的

ccj
#36 ccj • 2015-05-23 14:39

@giantmangu888 3.0认证这块变了,还没更新。

giantmangu888
#37 giantmangu888 • 2015-05-25 11:20

请问有排期么? 期待新版本支持mongodb3.0

liuchunjing
#38 liuchunjing • 2015-07-08 15:17

@ccj -S 参数后的时间我怎么取到,还是以上那个例子,如果B机器给关了。怎么知道工具同步了那些数据,再次同步的的时候这个时间点怎么找到?

liuchunjing
#39 liuchunjing • 2015-07-08 15:31

补充以下,这个时间点是不是指定的不需要那么精确就可以,如果指定的时间点靠前了,即使此前已经导入过的数据,在导入到目的数据库后,也不会产生重复数据。

ccj
#40 ccj • 2015-07-13 22:23

@liuchunjing 时间用shell 里面date或者mongodb里面函数转换为时间戳就可以了,mongosync 同步log里会有同步到哪的的时间戳

ccj
#41 ccj • 2015-07-13 22:23

@liuchunjing 可以提前,没关系

liuchunjing
#42 liuchunjing • 2015-07-22 10:59

@ccj 如果进行实时同步,好像启动时主机必须加上 –master参数,不加这个参数实时同步不了。是不是这个样子,还请确认,另外同步用的账号是不是必须是 admin账号才可以?能不能留个QQ交流!

liuchunjing
#43 liuchunjing • 2015-07-22 11:00

@ccj 我的QQ是826555892

konglingyu
#44 konglingyu • 2016-05-23 10:42

楼主亲,这个支持mongo2.4到mongo3.0以上版本的数据同步吗

ccj
#45 ccj • 2016-05-24 21:25

@konglingyu 不支持3.0,这个工具好久没更新了。

zhangang
#46 zhangang • 2016-09-16 02:37

工具非常棒!非常感谢~mongoDB现在比前两年应用的更多(连阿里云都推出了mongo数据库),而且mongodb官方已经在中国商业化了,而且收费巨贵,@ccj 如果对mongodb有足够深的研究,可以提供一些解决方案,比如部署,迁移,维护之类的服务,只要价格合理应该会有不少公司买单···官方实在太坑啦~

wavelet123
#47 wavelet123 • 2016-12-01 13:45

Hi,我从2.6.11同步到3.0.7,用mongosync 行不行?有1.2T 的数据。用原生的 master/slave模式,由于 Oplog 的原因,总是没办法搭建从库。没有开 auth的。我看网上说 source 要 小于等于2.6,target 最多支持到3.2.4?
麻烦确认一下。

谢谢。

wavelet123
#48 wavelet123 • 2016-12-01 14:10

http://blog.sina.com.cn/s/blog_75ad98f30102w8n0.html
我看的是这个。如果没有开 auth 的话,是不是3.0也没问题?

谢谢

wavelet123
#49 wavelet123 • 2016-12-01 14:19

还有一个问题,如果主库的 oplog 空间不够,用这个工具同步可以吗?

ccj
#50 ccj • 2016-12-04 12:19

@wavelet123 没有auth应该可以,oplog一般默认够用的,如果不够同步时候会报错。

douyun
#51 douyun • 2016-12-13 10:20

请问 , 这个工具可以开源吗? 我们有差不多上百套mongodb要迁移 。从2.x 到 3.x , 但是您的工具不支持 3.x版本。 可以开源的话, 我们就能修改了。

wavelet123
#52 wavelet123 • 2016-12-13 12:34

mongosync -h 192.1.1.1:20017 —to 192.1.1.32:20017 -d test -c testsys —oplog —fork

hi,我们通过这种方式从 mongo2.6.11同步到3.2.10的过程,发现有一条数据,主库更新了,但是3.2的库没有抓取到这个更新。
日志没有报错。能不能麻烦帮忙看下。

wavelet123
#53 wavelet123 • 2016-12-13 12:36

楼主能不能给个联系方式,qq 或者 email 都行。给楼主添麻烦了。谢谢!

需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。