前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MONGOREPLAY 的“坑”

MONGOREPLAY 的“坑”

作者头像
AustinDatabases
发布2019-06-21 16:28:17
1.1K0
发布2019-06-21 16:28:17
举报
文章被收录于专栏:AustinDatabasesAustinDatabases

故事是这样开始的,因为想做一个MONGODB 的测试库同步部分生产库的数据,同时不想从基本数据搞起,因为数据量比较大。 其实是可以通过mongoexport 和 mongoimport 来搞起的,但问题是如果只是想捕获某个时间段的数据呢,或者仅仅想复现一下生产库中某个时间段出现的故障数据。怎么能跟踪这些数据并记录,在测试库上复现。

其实从MONGODB 3.4以后是有一个工具可以帮助的,Mongoreplay,他主要的功能就是,通过网络抓包,将通过网卡的数据截获变成特定的数据格式,然后在通过 replay的方式将数据在另一个库上进行重放,我们可以认为他有点类似于mysql 的binlog. 当然原理可能不同。

坑在哪里,继续往下听。 在捕捉数据的时候,要指定网卡,要指定你捕捉的端口号

mongoreplay record -i ens32 -e "port 27027" -b 20 -p /mongodata/mongo.json

据以BSON的方式灌入你指定的文件中。然后你拿着这个文件,可以原地将数据灌入到指定的 MONGODB 服务器

数据源位置,执行play 命令就可以将数据灌入到测试机中。

坑在哪里,在测试的过程中,发现数据时有时无,而且数据时有时无是有规律的,凡是在本地机执行的命令都找不到,凡是不在本地机执行的命令都有相关的数据抓取。

这里就牵扯,不是这个命令的问题,是抓包的问题,命令中 -i 后面的是必须要指定数据来源的网卡,一般机器有lo 本地回路,和 对外的物理网卡。而监控的时候,是在监控对外的物理网卡,而本地执行的命令均在 lo 回路中体现。

但这里就出现了问题,如果想要一个完全的数据通过mongoreplay命令是很困难的,即使我们产生两套mongoreplay 去抓取本地 和 外网的数据,但执行的顺序我们是无法再回放中进行鉴别的。

所以mongoreplay 这样的功能,仅仅有限于系统调试和故障重放,对于数据同步来说,这个功能实属鸡肋。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档