最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【基本解决】在线MongoDB只能导出部分的101条记录无法完全导出

导出 crifan 886浏览 0评论
已有某个阿里云的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
mongodump and mongoexport export only partial records – Google Groups
[mongodb-user] Re: mongodump and mongoexport export only partial records – Grokbase
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导出大量的数据。

转载请注明:在路上 » 【基本解决】在线MongoDB只能导出部分的101条记录无法完全导出

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
86 queries in 0.166 seconds, using 22.08MB memory