您可以通过DMSMongo Shell登录MongoDB数据库,本文介绍使用Mongo Shell登录数据库时出现的典型问题及解决方法。

提示connection attempt failed错误

现象:

#mongo --host ali12345678.mongodb.rds.aliyuncs.com:3717 --authenticationDatabase admin -u test -p xxx
MongoDB shell version: 3.2.3
DB Prefix:
connecting to: 10.1.2.8:3717/admin
2016-05-31T15:25:58.940+0800 W NETWORK  Failed to connect to 10.*.*.8:3717 after 5000 milliseconds, giving up.
2016-05-31T15:25:58.943+0800 E QUERY    Error: couldn't connect to server 10.*.*.8:3717 (10.1.2.8), connection attempt failed
    at connect (src/mongo/shell/mongo.js:181:14)
    at (connect):1:6 at src/mongo/shell/mongo.js:181
exception: connect failed
可能的原因解决方法
执行Mongo Shell命令的ECSMongoDB实例不在同一个专有网络或网络类型不一致。
  • 不在同一专有网络时:将MongoDB实例的网络类型切换为经典网络,然后再切换回专有网络。
    说明 切换回专有网络时选择和ECS实例相同的专有网络即可。
  • 网络类型不同时:详情请参见不同网络类型的ECS实例与MongoDB实例如何连接

辅助排查方法:可以通过telnet来确认到达MongoDB实例的网络是否通畅,例如telnet dds-ali123456789.mongodb.rds.aliyuncs.com 3717

测试端口图中示例表示可以正常解析该域名地址,且3717端口可正常通信。

提示Authentication failed错误

现象:

#mongo --host ali12345678.mongodb.rds.aliyuncs.com:3717  --authenticationDatabase admin -u test -p xxx
MongoDB shell version: 3.2.3
connecting to: 10.1.2.8:3717/test
2016-05-31T15:50:18.623+0800 E QUERY    Error: 18 Authentication failed.
    at DB._authOrThrow (src/mongo/shell/db.js:1271:32)
    at (auth):6:8
    at (auth):7:2 at src/mongo/shell/db.js:1271
exception: login failed
可能的原因解决方法
登录数据库用户名错误。使用正确的数据库用户名登录。
登录数据库的密码错误。使用正确的数据库密码登录。
连接的用户跟鉴权数据库不匹配用户需要和鉴权数据库对应,例如root用户是admin数据库下的用户,使用root连接时,必须指定鉴权数据库为admin。
客户端版本过低Mongo Shell版本必须3.0及以上的版本,安装步骤请参见官方文档 Install MongoDB。其他语言客户端的版本要求请参见Driver兼容性文档

提示运行isMaster命令出现网络错误

现象:

#mongo --host ali12345678.mongodb.rds.aliyuncs.com:3717 --authenticationDatabase test -u test -p xxxxxx
MongoDB shell version v3.4.10
connecting to: mongodb:ali1234567878.mongodb.rds.aliyuncs.com:3717/
2018-12-18T14:26:11.946+0800 E QUERY    [thread1] Error: network error while attempting to run command 'isMaster' on host 'ft12345678.mongodb.rds.aliyuncs.com:3717'  :
connect@src/mongo/shell/mongo.js:237:13
@(connect):1:6
exception: connect failed
可能的原因解决方法
ECSIP地址没有加入到MongoDB实例白名单中ECSIP地址加入MongoDB实例的白名单中,详情请参见设置白名单

提示Timeout while receiving message信息

org.springframework.data.mongodb.UncategorizedMongoDbException: Timeout while receiving message; nested exception is com.mongodb.MongoSocketReadTimeoutException: Timeout while receiving message
可能的原因解决方法
异常的慢查询占用实例资源,导致CPU使用率激增甚至到达峰值。检查是否有慢查询,建议进行添加索引优化。具体方法请参见分析数据库慢请求
应用端连接池的配置错误引起,如超时时间的设置等。详情请参见如何查询及限制连接数

常见的连接场景