You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

远程执行mongoimport持续抛出连接错误的排查求助

问题:mongosh可远程连接MongoDB,但mongoimport远程导入失败

环境与现状

  • 两台机器:一台存储待导入的CSV文件,另一台部署MongoDB 6.0原生实例(无集群、未启用SSL,运行在27017端口)
  • 存储文件的机器能通过telnet HOST 27017连通MongoDB服务器,且可通过以下命令正常登录:
    mongosh --host=HOST_IP --port=27017 --username=USERNAME --password="PASSWORD" --authenticationDatabase=admin
    

问题表现

执行远程导入命令时失败:

mongoimport --host=HOST_IP --port=27017 --username=USERNAME --password="PASSWORD" --authenticationDatabase=admin --db=DATABASE --collection=COLLECTION --numInsertionWorkers=3 --type=csv --mode=insert --headerline --file=FILENAME.csv

添加-vvvvv参数后得到详细报错:

using 4 decoding workers
using 3 insert workers
filesize: 123456 bytes
using fields: A,B,C
will listen for SIGTERM, SIGINT, and SIGKILL
[........................] DATABASE.COLLECTION  4.00KB/123KB (0.7%)
[........................] DATABASE.COLLECTION  4.00KB/123KB (3.25%)
Failed: error connecting to db server: no reachable servers
imported 0 documents

额外排查信息

  • 改用URI格式传递连接参数,仍无法成功
  • MongoDB服务器日志显示,对应时间点有Connection accepted与Connection ended的成对记录
  • 将文件复制到MongoDB服务器本地,以127.0.0.1为执行host可成功导入,但业务需求必须使用远程导入方式

MongoDB配置文件(去除注释后)

storage:
  dbPath: C:\Program Files\MongoDB\Server\6.0\data
  journal:
    enabled: true
systemLog:
  destination: file
  logAppend: true
  path:  C:\Program Files\MongoDB\Server\6.0\log\mongod.log
net:
  port: 27017
  bindIp: 0.0.0.0
security:
  authorization: "enabled"

解决思路

1. 匹配工具与服务器版本

mongosh和mongoimport属于MongoDB工具集,版本不兼容可能导致连接异常。执行以下命令确认版本是否与MongoDB服务器6.0一致:

mongosh --version
mongoimport --version

如果版本不匹配,将mongoimport升级或降级至与服务器相同的版本。

2. 关闭多线程插入

命令中启用了--numInsertionWorkers=3多线程插入,远程环境下多线程可能引发连接不稳定。尝试去掉该参数,用单线程执行:

mongoimport --host=HOST_IP --port=27017 --username=USERNAME --password="PASSWORD" --authenticationDatabase=admin --db=DATABASE --collection=COLLECTION --type=csv --mode=insert --headerline --file=FILENAME.csv

3. 延长连接超时时间

远程导入时网络延迟可能触发超时,添加--connectTimeoutMS和--socketTimeoutMS参数延长超时阈值(示例设置为60秒):

mongoimport --host=HOST_IP --port=27017 --username=USERNAME --password="PASSWORD" --authenticationDatabase=admin --db=DATABASE --collection=COLLECTION --numInsertionWorkers=3 --type=csv --mode=insert --headerline --file=FILENAME.csv --connectTimeoutMS=60000 --socketTimeoutMS=60000

4. 检查防火墙/安全组规则

虽然telnet能连通,但部分防火墙可能限制持续数据流传输(而非仅初始连接)。确认MongoDB服务器端的防火墙/安全组规则,允许存储文件机器的IP进行27017端口的持续流量传输。

5. 强制使用IP地址而非主机名

若之前使用主机名指定服务器,替换为实际IP地址,避免多线程导入时出现DNS解析问题。

6. 调整连接池大小

尝试通过--maxPoolSize参数限制连接池大小,降低连接冲突概率(示例设置为1):

mongoimport --host=HOST_IP --port=27017 --username=USERNAME --password="PASSWORD" --authenticationDatabase=admin --db=DATABASE --collection=COLLECTION --numInsertionWorkers=3 --type=csv --mode=insert --headerline --file=FILENAME.csv --maxPoolSize=1

内容的提问来源于stack exchange,提问作者rollin340

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 23:27:02