远程执行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
相关产品推荐
相关产品推荐

