您可以通過DMSMongo Shell登錄MongoDB數(shù)據(jù)庫,本文介紹使用Mongo Shell登錄數(shù)據(jù)庫時(shí)出現(xiàn)的典型問題及解決方法。

提示connection attempt failed錯(cuò)誤

現(xiàn)象:

#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
可能的原因解決方法
執(zhí)行Mongo Shell命令的ECSMongoDB實(shí)例不在同一個(gè)專有網(wǎng)絡(luò)或網(wǎng)絡(luò)類型不一致。
  • 不在同一專有網(wǎng)絡(luò)時(shí):將MongoDB實(shí)例的網(wǎng)絡(luò)類型切換為經(jīng)典網(wǎng)絡(luò),然后再切換回專有網(wǎng)絡(luò)。
    說明 切換回專有網(wǎng)絡(luò)時(shí)選擇和ECS實(shí)例相同的專有網(wǎng)絡(luò)即可。
  • 網(wǎng)絡(luò)類型不同時(shí):詳情請(qǐng)參見不同網(wǎng)絡(luò)類型的ECS實(shí)例與MongoDB實(shí)例如何連接

輔助排查方法:可以通過telnet來確認(rèn)到達(dá)MongoDB實(shí)例的網(wǎng)絡(luò)是否通暢,例如telnet dds-ali123456789.mongodb.rds.aliyuncs.com 3717

測(cè)試端口圖中示例表示可以正常解析該域名地址,且3717端口可正常通信。

提示Authentication failed錯(cuò)誤

現(xiàn)象:

#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
可能的原因解決方法
登錄數(shù)據(jù)庫用戶名錯(cuò)誤。使用正確的數(shù)據(jù)庫用戶名登錄。
登錄數(shù)據(jù)庫的密碼錯(cuò)誤。使用正確的數(shù)據(jù)庫密碼登錄。
連接的用戶跟鑒權(quán)數(shù)據(jù)庫不匹配用戶需要和鑒權(quán)數(shù)據(jù)庫對(duì)應(yīng),例如root用戶是admin數(shù)據(jù)庫下的用戶,使用root連接時(shí),必須指定鑒權(quán)數(shù)據(jù)庫為admin。
客戶端版本過低Mongo Shell版本必須3.0及以上的版本,安裝步驟請(qǐng)參見官方文檔 Install MongoDB。其他語言客戶端的版本要求請(qǐng)參見Driver兼容性文檔

提示運(yùn)行isMaster命令出現(xiàn)網(wǎng)絡(luò)錯(cuò)誤

現(xiàn)象:

#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實(shí)例白名單中ECSIP地址加入MongoDB實(shí)例的白名單中,詳情請(qǐng)參見設(shè)置白名單

提示Timeout while receiving message信息

org.springframework.data.mongodb.UncategorizedMongoDbException: Timeout while receiving message; nested exception is com.mongodb.MongoSocketReadTimeoutException: Timeout while receiving message
可能的原因解決方法
異常的慢查詢占用實(shí)例資源,導(dǎo)致CPU使用率激增甚至到達(dá)峰值。檢查是否有慢查詢,建議進(jìn)行添加索引優(yōu)化。具體方法請(qǐng)參見分析數(shù)據(jù)庫慢請(qǐng)求
應(yīng)用端連接池的配置錯(cuò)誤引起,如超時(shí)時(shí)間的設(shè)置等。詳情請(qǐng)參見如何查詢及限制連接數(shù)

常見的連接場(chǎng)景