之前爬去的一些数据,想将数据从mongodb导入到MySQL中,记录一下遇到了一系列问题.
首先使用mongodb自带的mongoexport 工具将数据导出为json格式
mongoexport --host 127.0.0.1 --port 27017 --username spider --password spider987COM --collection spider --db toutiao_app_article --out /Users/zhangsf/data/ifeng/toutiao_app_spider.json
解释:
--host 后的 localhost:要导出数据库 ip
--port 后的 27017:要导出的实例节点端口号
--username 后的 zhangsf:数据库用户名
--password 后的 zhangsf:数据库用户密码
--collection 后的 spider:要导出的表名
--db 后的 zhangsf:要导出的表所在数据库名
--out 后的 /Users/zhangsf/data/ifeng/spider.json
:要导出的文件路径(默认为当前文件夹)
导出文件之后,再进入MySQL中使用MySQL8支持的直接导数据的命令
进入MySQL
mysql -u root -p
create database spider_article DEFAULT CHARACTER SET utf8;
use spider_article
根据mongodb中的数据结构创建table
create table article(
_id varchar(50),
book_title varchar(50),
book_text text,
concurrent_url varchar(100),
category varchar(20),
create_time varchar(100)
);
再就是直接使用工具
LOAD DATA INFILE "/private/tmp/spider_article.json" REPLACE INTO TABLE article FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\n';
将数据导入.
最终
只成功了一部分,具体问题后续再看.
遇到的问题:
第一个就是:
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

Mac中的解决方法就是,
这个问题解决 参考上一篇写的 Mac上MySQL出现secure-file-priv为null

第二个问题就是:
ERROR 1406 (22001): Data too long for column 'book_text' at row 1
发现使用varchar根本满足不了这个文本大小的需求,最终选用了text
第三个问题:
ERROR 1262 (01000): Row 1 was truncated; it contained more data than there were input columns
这个错误的原因是数据文件中的列数跟 MySQL 数据表字段数目没有完全匹配,并且 sql_mode 设为 strict 模式。
先查询当前的sql_mode,再设置sql_mode的模式。

到此为止,数据导入了一半

可能格式有问题,后续调整格式,再重新转,先就记录这么多了。
本文分享了从MongoDB导出数据并导入MySQL的过程及遇到的问题。使用mongoexport工具将数据转换为JSON格式,通过LOAD DATA INFILE命令导入MySQL,解决secure-file-priv限制、数据过长及列数不匹配等常见问题。
641

被折叠的 条评论
为什么被折叠?



