使用mongoexport导出数据进度卡在0%且mongod服务崩溃如何解决
排查步骤
- 优先排查mongod运行日志与崩溃信息
进入默认日志路径/var/log/mongodb/查看mongod.log,重点定位崩溃时间点前后的报错堆栈、OOM kill记录、BSON类型解析异常报错。如果开启了core dump,可通过gdb解析core文件定位崩溃触发的具体代码逻辑,确认是否和csv导出的字段遍历逻辑相关。 - 小范围导出验证问题范围
给原有导出命令添加--limit=10参数,限定仅导出前10条数据:- 如果小范围导出正常,说明异常由特定数据行的字段格式异常触发,可通过二分法逐步限定导出范围定位异常数据
- 如果小范围导出仍触发崩溃,排除数据内容问题,优先排查版本兼容性
- 验证工具与服务端版本匹配度
分别执行mongod --version和mongoexport --version查看两者版本,若大版本号差值超过1(如mongod为6.0,mongoexport为4.4),属于版本不兼容触发的服务端异常,将mongoexport升级到与mongod一致的大版本后重试即可。 - 检查服务端资源占用情况
导出前监控mongod的内存、CPU使用率,确认是否因导出操作触发OOM被系统强制终止:如果是OOM问题,可在导出命令中添加--batchSize=100降低单批拉取数据量,或添加--forceTableScan参数避免导出时加载全量索引占用过多内存。 - 排查特殊字段的csv导出兼容问题
如果目标集合包含嵌套文档、数组、二进制类型、Decimal128等特殊字段,旧版本mongoexport导出csv时对这类字段的解析逻辑存在已知bug,可先去掉--type=csv相关参数,尝试导出为json格式验证:- 若json导出正常,说明问题为csv导出逻辑的兼容性bug,可先导出json后自行转换为csv,或在字段列表中排除特殊类型字段后再尝试csv导出
临时应急方案
若需紧急导出数据,可直接在mongod所在服务器本地通过mongo shell执行聚合查询导出csv,绕开mongoexport的异常逻辑。
内容的提问来源于stack exchange,提问作者Juan Pablo Giraldo Perez
相关产品推荐
相关产品推荐

