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

MongoDB副本集停实例后执行rs.status()报BSON UTF-8错误

解决MongoDB副本集单实例停止后rs.status()报BSON UTF-8错误的问题
  • 检查副本集实例日志
    停止的实例可能在关闭过程中写入了含非UTF-8字符的元数据,导致副本集状态文档异常。前往各实例的日志目录(如指定的--dbpath路径下的mongod.log),搜索BSON或UTF-8相关报错,定位出问题的节点和具体字段。

  • 手动修复副本集配置文档
    登录存活的主节点,执行rs.conf()查看配置,检查members数组中对应停止节点的host、tags等字段是否存在非UTF-8字符。若发现异常,通过rs.reconfig()修正:

    var cfg = rs.conf();
    // 示例:修正索引为2的节点host字段
    cfg.members[2].host = "127.0.0.1:27019";
    rs.reconfig(cfg);
    

    若主节点不可达,可添加{force: true}参数强制重配置。

  • 给MongoDB实例添加启动参数
    为每个mongod实例添加--utf8validation false启动参数,全局关闭UTF-8校验,避免局部非UTF-8字符触发错误:

    mongod --port 27017 --dbpath ./data/db1 --replSet rs0 --utf8validation false
    
  • 清理系统profile集合
    若系统profile集合存在异常数据,可能导致副本集状态查询出错。直接清空该集合:

    db.system.profile.drop();
    

    如需重新开启 profiling,执行db.setProfilingLevel(1)即可。

  • 调整系统区域设置
    西班牙语区域的LC环境变量可能影响字符处理,启动mongod前临时切换为英文UTF-8环境:

    • Linux/macOS:
      export LC_ALL=en_US.UTF-8
      mongod --port 27017 --dbpath ./data/db1 --replSet rs0
      
    • Windows:
      chcp 65001
      mongod --port 27017 --dbpath ./data/db1 --replSet rs0
      
  • Node.js端原生驱动调用
    绕过mongoose封装,直接使用MongoDB原生驱动执行状态查询并关闭UTF-8校验:

    const mongoose = require('mongoose');
    async function getReplStatus() {
      const adminDb = mongoose.connection.db.admin();
      const status = await adminDb.command(
        { replSetGetStatus: 1 },
        { enableUtf8Validation: false }
      );
      console.log(status);
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:22:05