MongoDB带认证环境下使用sh.addShard添加分片的正确语法咨询
解决MongoDB添加分片时的认证凭据问题
这个问题我之前配置分片集群的时候也碰到过,核心原因是你密码里的冒号被MongoDB的连接字符串解析逻辑当成了地址分隔符,导致识别错误。给你两种稳妥的解决办法:
方法一:URL转义密码中的特殊字符
如果你的密码包含冒号、@、/这类特殊字符,需要对它们做URL编码转义后再放到连接字符串里。比如冒号对应的编码是%3A,你可以把密码里的:替换成%3A,然后使用以下格式的命令:
sh.addShard( "rs0/admin:XXXXXpassword%3AXXXXXXXX@XXX.XX.XX.XXX:27018" )
注意:如果密码里还有其他特殊字符,比如
@对应%40、/对应%2F,也要一并转义,否则还是会出现解析错误。
方法二:使用配置对象传入参数(推荐)
相比字符串格式,用配置对象的方式更清晰,还能完全避免特殊字符的解析问题,直接把认证信息拆分成独立参数传入:
sh.addShard({ _id: "rs0", // 分片副本集的名称 host: "XXX.XX.XX.XXX:27018", // 副本集成员的地址 authSource: "admin", // 认证使用的数据库 username: "admin", // 认证用户名 password: "XXXXXpasswordXXXXXXXX" // 原始密码,无需转义 })
额外提醒
不管用哪种方法,都要确保你使用的账号拥有足够的权限来添加分片,一般需要给账号分配clusterManager或者clusterAdmin角色,否则还是会出现权限不足的错误。
内容的提问来源于stack exchange,提问作者user3784864
相关产品推荐
相关产品推荐

