已有某个阿里云的ECS中的MongoDB,现在想要导出数据,结果试了几种办法,包括mongoexport和mongodump,结果竟然都是没法继续导出:
➜ mongo_export_data mongoexport -h HOST --port PORT -u storybook -p PPWWDD -d storybook -c scholastic -o ./storybook_scholastic.json 2018-10-29T10:48:17.193+0800 connected to: xxx:32018 2018-10-29T10:48:18.097+0800 [........................] storybook.scholastic 0/51785 (0.0%) 2018-10-29T10:48:19.096+0800 [........................] storybook.scholastic 0/51785 (0.0%) ... 2018-10-29T10:48:38.097+0800 [........................] storybook.scholastic 0/51785 (0.0%)
和:
➜ mongo_export_data mongodump -h HOST --port PORT -u storybook -p PPWWDD -d storybook -o . 2018-10-29T10:52:10.484+0800 writing storybook.scholastic to 2018-10-29T10:52:10.485+0800 writing storybook.main to 2018-10-29T10:52:13.184+0800 [........................] storybook.scholastic 0/51785 (0.0%) 2018-10-29T10:52:13.184+0800 [........................] storybook.main 0/51785 (0.0%) 2018-10-29T10:52:13.184+0800 2018-10-29T10:52:16.184+0800 [........................] storybook.scholastic ... 2018-10-29T10:52:28.185+0800 2018-10-29T10:52:31.184+0800 [........................] storybook.scholastic 101/51785 (0.2%) 2018-10-29T10:52:31.184+0800 [........................] storybook.main 101/51785 (0.2%)
只能导出最开始的一部分数据:
后来发现只有101条记录
没法完全导出所有的数据。
mongodb export only 101 record
mongodb export only partial record
提到了:
防火墙的配置有问题,需要重新配置后重启,就可以了?
那去删除之前的配置:
重新添加一下
- 32018/32018
- 1
- 222.92.130.218
- 感觉应该改为:222.92.130.218/0
- 允许xxx公司的新IP访问Mongo
删除后,竟然本地mongodump还能连上服务器。。。
难道安全组不是实时的?需要重启服务器后安全组才生效?
算了,不去重启了。因为经过同事提醒是:
此处实时导出MongoDB,100多MB的数据,估计是防火墙等其他原因,限制了导出。
实际上不应该重启(服务器,去看看安全组是否真的生效了),应该改为:
在线服务器中,导出mongodb的数据,然后再下载文件,才是更合理的做法
所以再去加回防火墙设置:
另外,去试了试limit:
➜ mongo_export_data mongoexport -h HOST --port PORT -u storybook -p PPWWD --limit 200 -d storybook -c main -o storybook_main_200.json --type json 2018-10-29T11:44:45.476+0800 connected to: HOST:PORT 2018-10-29T11:44:46.360+0800 exported 200 records
然后是可以正常导出的200条记录的:
而mongodump本身不支持–limit参数,没法测试limit效果。
【总结】
此处别人尝试用mongoexport去实时导出在线MongoDB中,近50多MB的数据:
结果失败:只能导出101条数据,无法导出全部数据
然后换用mongodump 也是同样现象
原因:
不完全确定,但很可能是:防火墙设置方面的问题 -》 限制了实时的大批量数据的从MongoDB导出,只能导出部分(101条)数据,没法完全导出所有数据(此处有50M)
解决办法:
应该避免这种不合适的操作。
否则容易产生各种问题,包括性能方面的:
“全量的话,5w条数据,我不知道是什么机制。是把数据查好了通过网络传输数据然后本地写到文件里,还是写到临时文件然后网络传输文件?”
应该改为:
在线服务器中去(用mongoexpot或mongodump都可以)导出MongoDB的数据,保存为文件(或文件夹再去压缩成文件),然后再去下载文件到本地。
这样可以避免实时从MongoDB导出大量的数据。