美文网首页MongoDB Research
从MySQL迁移数据到MongoDB

从MySQL迁移数据到MongoDB

作者: animagus | 来源:发表于2019-08-16 17:08 被阅读0次

整体思路参考

需求

  1. 将mysql中的数据导入到mongodb
  2. mysql中要将几条相似数据导入成一条记录

思路

  1. 从mysql导出数据到tvs
  2. 其中使用group将相似记录分组到一条记录, 并使用group_concat将相似记录的字段拼接为json
  3. 导入数据到mongodb, 设置相应的格式
  4. 其中自己组的json不能自动被mongodb识别, 只能暂时以字符串的形式保存, 以往日后能够解决

需要注意的点

  1. group_concat存在长度限制,默认最大长度为1024
    参考

解决方案 SET global group_concat_max_len=15000;

或者 SET session group_concat_max_len=15000;

  1. 一开始使用cvs格式,但是csv使用逗号分隔,tsv使用tab分隔,这里自己组了json,所以需要导出到tsv格式
  2. mysql select空字段会是null,需要写一个默认值占位,这里使用了ifnull(update_date, cast('2019-01-01 00:00:00' as datetime)), 用法参考mysql的ifnull函数.
  3. mongodb导入时设计类型以供mongdb识别, 命令为--columnsHaveTypes, 具体参考 mongoimport官方文档

第一步: 从MySQL导出数据

连接mysql
mysql -h 10.1.65.12 -uroot -p
进入数据库
use ci_bem_d_question_taizhou

取数据的命令
select question_id,concat('{', 
 group_concat("\"",unique_key,"\"",':',"\"",content,"\"" separator ',')
 , '}')
 ,patient_id,task_id,version,delete_flag,create_date,ifnull(update_date, cast('2019-01-01 00:00:00' as datetime))
 from qs_answer
 group by patient_id, task_id, question_id 
 limit 5
 into outfile '/tmp/mapline.tsv' fields terminated by '\t'optionally enclosed by ''lines terminated by '\n';

第二步: 导入到MongoDB

mongoimport --drop -d question_taizhou -c qs_answer --type tsv --columnsHaveTypes --fields "question_id.int64(),value.string(),patient_id.int64(),task_id.int64(),version.int32(),delete_flag.int32(),create_date.date(2006-01-02 15:04:05),update_date.date(2006-01-02 15:04:05)" --file 'mapline.tsv'

相关文章

网友评论

    本文标题:从MySQL迁移数据到MongoDB

    本文链接:https://www.haomeiwen.com/subject/cayqsctx.html