-
好些用户购买华为云dds(mongodb)时都会告知我们他在某某友商云上有mongdb数据库,想把友商上的数据库迁移过来,但在官网上没有发现mongodb数据迁移的工具,问怎么办?此时我们尴尬的说,目前数据迁移工具正在规划中,很快就能在官网上线mongodb数据迁移工具,到时手指动一动就能迁移数据了。但目前呢?目前怎么办?考虑到用户有这个云服务商之间迁移数据的需求,虽然华为云还没出mongodb自动迁移工具,但为解客户燃眉之急,我写些自己平时关于mongodb数据迁移的方法:那就是目前还是有办法的!当然只能利用开源工具进行纯手工操作了,虽然麻烦但也是一种手段,也能将友商数据迁移过来。好,下面我就详细和大家聊聊纯手工迁移mongodb的方案.(目前华为云dd只支持mongodb 3.2.7,因此我们讨论的方案都是围绕3.2.7版本进行的。)任何方案都是有业务场景的,不同的业务场景对应的方案的操作和复杂度是不一样的,我们按照业务场景的复杂度讲解。1. 业务数据不重要,允许业务长时间中断。(1). 停掉友商的mongodb服务,中断业务,不允许任何数据的变更。(2). 使用mongoexport导出数据mongoexport --host --port --ssl --sslAllowInvalidCertificates --type json--authenticationDatabase --username --password --db --collection --out (3).使用mongoimport将数据导入到华为云dds mongoimport--host --port --ssl--sslAllowInvalidCertificates --type json --authenticationDatabase --username --password --db --collection --file 注意:如果购买的华为云数据库有公网ip,可以在任何一台能连上公网ip的服务器上导入导出数据。如果没有购买公网ip,则先购买一台华为云的ecs,这台ecs和数据库在同一个网段和安全组,然后在这台ECS上导入数据。 (4). 将业务数据库ip切换至华为云mongodb,启动业务,数据迁移成功。2. 业务数据不重要,允许丢失数据但不能中断业务 这种业务场景一般是客户数据为临时,但业务不能中断必须保证在迁移的时间段业务是可用的。第二个业务场景和第一个很相似,因此迁移数据的方案也很相似,在数据迁移阶段不停掉友商数据库,数据迁移完成直接切换数据库ip到华为云dds,当然迁移这段时间的数据库就会丢失,因为没有从友商同步数据到华为云dds。3. 业务数据重要不允许丢失,业务不允许中断.这种业务场景中我们选取最具代表性也是最复杂的场景进行分析:我们选取用户存量数据大(上T的数据),ops高,一个小时就新增上百G的数据。因为存量数据大,数据迁移至少都在数小时以上,而ops高,那么在迁移的时间段会积累上百G的数据没有迁移到华为dds。Mongodb社区版没有提供增量导出,增量备份数据的方案,这些都是企业版mongodb才提供的。那么我们能用纯手工的方式(使用mongodb开源社区提供的生态工具)做到增量迁移数据吗?答案是利用开源工具是无法完美做到纯手工增量迁移的。原因如下:1. mongoexport/mongoimport : 首先说下mongoexport的工作原理,看上图是一边mongoexport导出数据一边往数据库里面**数据,显然最后导出的数据大于开始执行mongexport时数据库的数据。看了下mongoexport的源码,工作流程大概如下:首先获取开始执行mongoexport导出数据库的记录数量。得出这个记录数量后,mongoexport 开启一个cursor,利用这个cursor迭代读取数据,cursor每次读取的时候都是批量读取,最后一次迭代读取的数据量是在此时数据库总量和每次批量读取数据量中取最大值,如果此时数据库一直在变更数据那么很难确定最后总共读取的数量。因此客户在导出数据过程中一直在变更数据那么使用mongoexport导出的总数据量是无法确定的。那么迁移过程中新增数据怎么增量迁移呢?mongoexport本身并没有提供增量迁移的功能,但可以通过回放oplog的方法将迁移过程中增量的数据的oplog在目标机器上进行重做。不过Oplog记录的是所有的数据当然也包括不是这次迁移需要的数据的oplog,需要对oplog进行过滤重放,这块手工处理比较麻烦也容易出错,需要写程序进行自动处理。2. mongodump/mongorestore: mongodump可以备份所有数据然后利mongrestore进行恢复。对于备份过程中的增量数据,可以使用开源工具mongooplog处理增量oplog以达到增量备份数据的目的。但由于不同云服务商对shard的命名各不相同,因此恢复完成后必须登录数据库手动修改数据库里面shard的名字,这一步手动处理比较麻烦也容易出错。上述两种方法都需要注意oplog的大小,防止在备份过程中新增数据量过大,oplog数据被轮转覆盖,一旦覆盖就无法增量备份数据了。总结:目前纯手工操作的迁移数据的方式只能适应一些比较简单的业务场景,对于复杂场景,手工迁移存在操作复杂容易出错的缺点,程序化自动化的mongodb迁移工具不久就会出现在华为云官网上,那才是用户最贴心的解决方案。
-
好些用户购买华为云dds(mongodb)时都会告知我们他在某某友商云上有mongdb数据库,想把友商上的数据库迁移过来,但在官网上没有发现mongodb数据迁移的工具,问怎么办?此时我们尴尬的说,目前数据迁移工具正在规划中,很快就能在官网上线mongodb数据迁移工具,到时手指动一动就能迁移数据了。但目前呢?目前怎么办?考虑到用户有这个云服务商之间迁移数据的需求,虽然华为云还没出mongodb自动迁移工具,但为解客户燃眉之急,我写些自己平时关于mongodb数据迁移的方法:那就是目前还是有办法的!当然只能利用开源工具进行纯手工操作了,虽然麻烦但也是一种手段,也能将友商数据迁移过来。好,下面我就详细和大家聊聊纯手工迁移mongodb的方案.(目前华为云dd只支持mongodb 3.2.7,因此我们讨论的方案都是围绕3.2.7版本进行的。)任何方案都是有业务场景的,不同的业务场景对应的方案的操作和复杂度是不一样的,我们按照业务场景的复杂度讲解。1. 业务数据不重要,允许业务长时间中断。(1). 停掉友商的mongodb服务,中断业务,不允许任何数据的变更。(2). 使用mongoexport导出数据mongoexport --host --port --ssl --sslAllowInvalidCertificates --type json--authenticationDatabase --username --password --db --collection --out (3).使用mongoimport将数据导入到华为云dds mongoimport--host --port --ssl--sslAllowInvalidCertificates --type json --authenticationDatabase --username --password --db --collection --file 注意:如果购买的华为云数据库有公网ip,可以在任何一台能连上公网ip的服务器上导入导出数据。如果没有购买公网ip,则先购买一台华为云的ecs,这台ecs和数据库在同一个网段和安全组,然后在这台ECS上导入数据。 (4). 将业务数据库ip切换至华为云mongodb,启动业务,数据迁移成功。2. 业务数据不重要,允许丢失数据但不能中断业务 这种业务场景一般是客户数据为临时,但业务不能中断必须保证在迁移的时间段业务是可用的。第二个业务场景和第一个很相似,因此迁移数据的方案也很相似,在数据迁移阶段不停掉友商数据库,数据迁移完成直接切换数据库ip到华为云dds,当然迁移这段时间的数据库就会丢失,因为没有从友商同步数据到华为云dds。3. 业务数据重要不允许丢失,业务不允许中断.这种业务场景中我们选取最具代表性也是最复杂的场景进行分析:我们选取用户存量数据大(上T的数据),ops高,一个小时就新增上百G的数据。因为存量数据大,数据迁移至少都在数小时以上,而ops高,那么在迁移的时间段会积累上百G的数据没有迁移到华为dds。Mongodb社区版没有提供增量导出,增量备份数据的方案,这些都是企业版mongodb才提供的。那么我们能用纯手工的方式(使用mongodb开源社区提供的生态工具)做到增量迁移数据吗?答案是利用开源工具是无法完美做到纯手工增量迁移的。原因如下:1. mongoexport/mongoimport : 首先说下mongoexport的工作原理,看上图是一边mongoexport导出数据一边往数据库里面**数据,显然最后导出的数据大于开始执行mongexport时数据库的数据。看了下mongoexport的源码,工作流程大概如下:首先获取开始执行mongoexport导出数据库的记录数量。得出这个记录数量后,mongoexport 开启一个cursor,利用这个cursor迭代读取数据,cursor每次读取的时候都是批量读取,最后一次迭代读取的数据量是在此时数据库总量和每次批量读取数据量中取最大值,如果此时数据库一直在变更数据那么很难确定最后总共读取的数量。因此客户在导出数据过程中一直在变更数据那么使用mongoexport导出的总数据量是无法确定的。那么迁移过程中新增数据怎么增量迁移呢?mongoexport本身并没有提供增量迁移的功能,但可以通过回放oplog的方法将迁移过程中增量的数据的oplog在目标机器上进行重做。不过Oplog记录的是所有的数据当然也包括不是这次迁移需要的数据的oplog,需要对oplog进行过滤重放,这块手工处理比较麻烦也容易出错,需要写程序进行自动处理。2. mongodump/mongorestore: mongodump可以备份所有数据然后利mongrestore进行恢复。对于备份过程中的增量数据,可以使用开源工具mongooplog处理增量oplog以达到增量备份数据的目的。但由于不同云服务商对shard的命名各不相同,因此恢复完成后必须登录数据库手动修改数据库里面shard的名字,这一步手动处理比较麻烦也容易出错。上述两种方法都需要注意oplog的大小,防止在备份过程中新增数据量过大,oplog数据被轮转覆盖,一旦覆盖就无法增量备份数据了。总结:目前纯手工操作的迁移数据的方式只能适应一些比较简单的业务场景,对于复杂场景,手工迁移存在操作复杂容易出错的缺点,程序化自动化的mongodb迁移工具不久就会出现在华为云官网上,那才是用户最贴心的解决方案。
-
本帖最后由 云里的计算 于 2017-11-14 14:43 编辑众所周知,MongoDB已经成为NoSQL Document Store的代表: 4709 那么什么样的系统适合使用MongoDB呢? 这里有几个问题,可以在您系统设计和数据库选型时是否选择MongoDB提供参考和思路: n应用场景不需要事务及复杂关联查询 ? n对事务ACID要求不高? n需求会变,数据模型无法确定,想快速迭代开发, 后期有可能在大表上频繁的修改表结构? n应用需要2000-3000以上的读写QPS(更高也可以)? n应用需要TB甚至 PB 级别数据存储?应用发展迅速,需要能快速水平扩展? n应用要求存储的数据不丢失? n应用需要99.999%高可用? n应用需要大量的地理位置查询、文本查询? 如果以上问题的答案是Yes,Yes越多,那么是时候重点考虑您的系统构架在MongoDB上啦 {:3_52:}
上滑加载中
推荐直播
-
探秘仓颉编程语言:华为开发者空间的创新利器
2025/02/22 周六 15:00-16:30
华为云讲师团
本期直播将与您一起探秘颉编程语言上线华为开发者空间后,显著提升开发效率,在智能化开发支持、全场景跨平台适配能力、工具链与生态完备性、语言简洁与高性能特性等方面展现出的独特优势。直播看点: 1.java转仓颉的小工具 2.仓颉动画三方库lottie 3.开发者空间介绍及如何在空间用仓颉编程语言开发
回顾中 -
大模型Prompt工程深度实践
2025/02/24 周一 16:00-17:30
盖伦 华为云学堂技术讲师
如何让大模型精准理解开发需求并生成可靠输出?本期直播聚焦大模型Prompt工程核心技术:理解大模型推理基础原理,关键采样参数定义,提示词撰写关键策略及Prompt工程技巧分享。
去报名 -
华为云 x DeepSeek:AI驱动云上应用创新
2025/02/26 周三 16:00-18:00
华为云 AI专家大咖团
在 AI 技术飞速发展之际,DeepSeek 备受关注。它凭借哪些技术与理念脱颖而出?华为云与 DeepSeek 合作,将如何重塑产品与应用模式,助力企业数字化转型?在华为开发者空间,怎样高效部署 DeepSeek,搭建专属服务器?基于华为云平台,又该如何挖掘 DeepSeek 潜力,实现智能化升级?本期直播围绕DeepSeek在云上的应用案例,与DTSE布道师们一起探讨如何利用AI 驱动云上应用创新。
去报名
热门标签