*
*
*
* 场景 <https://blog.csdn.net/u014805916/article/details/79425102#场景>
* 迁移方案制定 <https://blog.csdn.net/u014805916/article/details/79425102#迁移方案制定>
* 迁移方案示例 <https://blog.csdn.net/u014805916/article/details/79425102#迁移方案示例>
* 迁移具体操作 <https://blog.csdn.net/u014805916/article/details/79425102#迁移具体操作>
* 遇到的问题 <https://blog.csdn.net/u014805916/article/details/79425102#遇到的问题>
场景
部门自己搭建了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
遇到的问题
* 有个业务需求只需迁移单个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:入库时间字段
* mongoexport导出的表无索引
发现直接导表未将索引导出,需要在新表中重建索引。
热门工具 换一换