MongoDb数据迁移(一)

        • 场景
        • 迁移方案制定
        • 迁移方案示例
        • 迁移具体操作
        • 遇到的问题

场景

部门自己搭建了2套集群,因无精力维护,需要对Mongo数据库迁移。统一迁移到集团,由DBA统一管理。

迁移方案制定

迁移方案需要多个小组,牵扯不同的业务,因此根据不同的业务制定不同的方案。 迁移方案需要考虑以下因素。
1. 写服务是否可以暂停,暂停容忍的最大时长。
2. 读服务是否对实时性数据的需求
3. 迁移数据量
4. 回退方案

迁移方案示例

一.迁移时间
1.测试库迁移时间:2017-12-07 15:00 
2.线上库迁移时间:2017-12-14 15:00
二.线上迁移步骤(2017-12-14 15:00 开始) 
1.业务组修改配置,数据库ip,用户名,密码
2.抓取组停写服务 
3.基础组导数据   10分钟
4.后台组切环境 & 验证(如果失败10分钟内不能解决,就回退)  
5.抓取组开写服务
6.迁移完毕
三.验证
1.工程师验证读写是否正常
2.测试和产品同学验证业务是否正常 @测试同学    
 12-08 验证测试环境(迁移后通知测试同学)
 12-14 验证线上环境(迁移后通知测试同学)

迁移具体操作

使用Mongo自带的迁移工具,具体操作命令:
1. 整体库迁移

#导出库
mongodump --port 30000 --db news_novel
#导入新库
mongostore -h X.X.X.X:10000 -d news_novel --dir /opt/soft/mongodb/bin/dump/news_novel -u=admin -p=123456

2. 迁移具体的表

#导出表
mongoexport --port 30000 --db news_novel --collection Chapter_news --out Chapter_news.json
# 导入表
mongoimport -h X.X.X.X:10000 -d news_novel --colleciton Chapter_news --file Chapter_news.json

遇到的问题

  1. 有个业务需求只需迁移单个collection,但是collection的数据量达到了110G,时长太长。
数据量 迁出 迁入
111G 1小时 1小时20分钟
180M 1分钟 1分钟
2.9G 7分钟 11分钟
364.6M 1分钟 1分钟

解决方案
1. mongosync工具
使用360的这个开源工具,按道理是能解决问题,但是因为make过程中,服务器yum无注册,依赖项太多,放弃。
2. 使用mongoexport命令的 q参数,添加了查询,分批次导入
查看了大表中的每一个document,发现没个document中存在入库时间字段,因此根据做了时间分割,写服务暂停之前,先把当日之前的数据导出,减少写服务暂停时间。

mongoexport --port 30000 --db recom --collection news4recom --query ' {dateTs:{$gt:1519747200000}}' --out /mnt/mongo/news4recom.json

dateTs:入库时间字段

  1. mongoexport导出的表无索引
    发现直接导表未将索引导出,需要在新表中重建索引。

你可能感兴趣的:(实战,DB)