最近准备把Mongodb的一个表的数据导入到MySQL库里,数据量在1kw+。
用Python写脚本,根据Mongodb的_id排序分次循环获取数据,然后批量插入MySQL数据库。
在本地小数据测试没问题,但到服务器跑后发现超级慢。1kw+的数据跑完需要好久好久,还遇到异常中途退出,什么错误信息也没有。奇怪~ 已经设置足够大的sys.setrecursionlimit
的。
mongoexport
导出csv
格式。如下:mongoexport --host localhost --db dbname --collection name --csv --out text.csv --fields username,age
导入
csv`数据。步骤如下创建对应的表。如上面的导出的是test.csv
,需要创建对应的test表与对应的字段username,age
,可以在前面多加一个自增id
列。
用工具导入数据。
mysqlimport --ignore-lines=1 --fields-optionally-enclosed-by="\"" --fields-terminated-by=, --columns='username,age' --local --host 192.168.1.2 -u dbuser -p test_data test.csv
有几个参数需要说明一下:
ignore-lines
一般为1,如果csv的第一行是标题,不然插入数据库表的第一列是标题。
fields-optionally-enclosed-by
如果导出的csv的字符串是用了双引号"
或单引号的,需要加此参数,不然插入到表的值也有双引号的。
还有注意导出的csv名称与创建的表名称一致。
Mongodb导出1000W+的时间是15分钟左右,导入到MySQL的时间一个小时左右。主要是看环境与硬件有关。 比使用分批读取然后批量快好几个小时。 如果数据上百万以上建议先导出csv
然后导入。
Mongodb大小是4G,导入到MySql后是2G+,主要与内容有关,不过文件会小三分之一到二分之一之间。
MySQL的
mysqlimport
的相关参数见此地址:mysqlimport — A Data Import ProgramMongodb的
mongoexport
的相关参数见:mongoexport
stat -c "%a %n" file , 755, 644
ModuleNotFoundError: No module named 'MySQLdb', ...
Ubuntu18.04下使用pyenv安装python报错:BUILD FAILED (Ubun ...
dell提供了工具远程查看服务器硬件状态,可以修改硬件的参数,可以远程连接过去直接修改,就不需要 ...
启动报undefined symbol: EVP_CIPHER_CTX_cleanup错误。op ...
ubuntu开启crontab日志记录及解决No MTA installed, discardi ...
暂时还没有评论,第一个来评论吧!