把MySQL里的数据导入到MongoDB

起因

由于一些未知的历史原因,公司某几张表的数据(MySQL)现在是聚合到了ElasticSearch里,但是ES似乎对频繁修改数据的这种场景不太适合。而且懂ES的人离职了,维护ES相关的东西就成了一个大坑。结合现有业务的需求(有聚合,统计之类的场景),我决定尝试一下MongoDB。

这是一个没有实际依据的决定,周围没人懂,只是Google了一些相关信息。

尝试

导出mysql的数据到MongoDB

失败的尝试

由于MongoDB里document都是BSON格式的,所以我直觉上想着MySQL导出JSON格式数据好了,并且查了一下MongoDB导入的命令,确实有支持JSON格式的导入。

于是我先导出了mysql里的一张表,大概170万数据;导出成JSON格式,有5.6G多一点。
但是导入的时候出现了错误,大概意思是格式不正确,忘记截图了,尝试搜索解决方法,但是都没有成功。

成功的尝试

好在在搜索的过程中,看了帮助文档,发现还可以导入csv格式的数据。

接下来就抱着试一试的态度,先把MySQL里的数据导出成csv格式的,只有1.26G左右。文件小了很多,这算一个优势吧。
然后尝试导入: mongoimport --host host:port -u username -p password -d db_name -c collection_name --file mysql_data.csv --authenticationDatabase admin --type csv --fieldFile fieldsname.txt

结果导入成功了,接下来就是模拟部分业务场景做一下查询,看看是否有效率问题。

参数解释
  • mongoimport 是官网下载的enterprise版本里的可执行文件之一
  • —authenticationDatabase admin 如果是本地连接远程服务器上的MongoDB必须要有这个参数,admin可以替换为你登录用户授权的相应database名称,如果你不清楚是什么,那就先试试admin能不能成功吧。
  • —fieldFile 参数为字段名文件。需要把MySQL里对应表的字段名(可以重命名成自己想要的字段名)整理成一个文件,每一个字段占一行。
加载评论框需要科学上网