本文介紹如何排查無法連接云數據庫MongoDB實例的問題。
若您已收到客戶端返回的錯誤信息,請查閱連接失敗常見報錯匹配解決方案。
概覽
檢查白名單設置
您需要將正確的客戶端IP地址添加到云數據庫MongoDB實例的白名單中,才能連接云數據庫MongoDB實例。
檢查網絡環境
- 私網:確保實例處于同一個地域、實例的網絡類型相同且私網連接地址正確。
若實例的網絡類型都是專有網絡(VPC),您還需要確保實例在同一個專有網絡中。
- 公網:確保公網連接地址正確。
如何解決由網絡環境導致的實例連接失敗問題,請參見如何解決由網絡環境導致的實例連接失敗問題?。
檢查實例連接地址
您需要使用正確的實例連接地址,才能連接云數據庫MongoDB實例。
- 常見原因一:使用了錯誤的網絡環境的連接地址。
例如計劃通過公網連接云數據庫MongoDB實例卻使用了實例的專有網絡連接地址,導致連接失敗。
解決方案:請根據網絡環境,使用正確的連接地址。
- 常見原因二:連接地址中的鑒權數據庫有誤。
解決方案:請在連接串中填寫正確的鑒權數據庫。
如果您使用高可用地址連接云數據庫MongoDB實例,連接串中包含數據庫和鑒權數據庫,這兩個數據庫可以相同也可以不同。本文以副本集實例的ConnectionstringURI地址為例進行介紹,連接串格式如下:mongodb://<username>:<password>@<host1>:<port1>,<host2>:<port2>,...,<hostN>:<portN>/<database>?replicaSet=<replicaSet_value>[&authSource=<authenticationDatabase>]
數據庫和鑒權數據庫的參數說明如下:<database>
:數據庫,實例連接成功后默認要訪問的數據庫,相當于自動執行命令use <database>
。authSource=<authenticationDatabase>
(可選):<authenticationDatabase>
為鑒權數據庫名稱。如果不配置該參數,<database>
會作為鑒權數據庫。鑒權數據庫用于存儲數據庫賬號和密碼。數據庫賬號必須在所屬的數據庫下進行鑒權,才能鑒權成功。
示例:- root賬號存儲在admin數據庫中,在admin數據庫鑒權成功后,實例進入admin數據庫。
mongodb://root:****@dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717,dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-6108****
- test賬號存儲在newDB數據庫中,在newDB數據庫鑒權成功后,實例進入admin數據庫。
mongodb://test:****@dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717,dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-6108****&authSource=newDB
- test賬號存儲在newDB數據庫中,在newDB數據庫鑒權成功后,實例進入newDB數據庫。
mongodb://test:****@dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717,dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717/newDB?replicaSet=mgset-6108****&authSource=newDB
- 常見原因三:實際連接的節點不是主節點(Primary節點)。
此原因僅適用于副本集實例。如果您的業務通過主節點的地址連接副本集實例,主備切換后實際連接的節點角色變成了從節點(Secondary節點),所以寫入失敗。說明 導致實例發生主備切換的原因有很多種,具體請參見 為什么實例會發生主備切換。
- 常見原因四:連接地址中的賬號密碼包含特殊字符
!@#$%^&*()_+=
。通過Mongo Shell或程序代碼連接云數據庫MongoDB實例時,如果連接串中的賬號密碼包含特殊字符
!@#$%^&*()_+=
,這些特殊字符在連接時無法被識別,會導致實例連接失敗。解決方案:您需要對賬號密碼中的特殊字符進行轉義處理,詳情請參見如何解決連接串中賬號密碼包含特殊字符導致連接失敗的問題。
檢查域名解析情況
域名解析正確,才能連接云數據庫MongoDB實例。
排查方案:通過ping <域名>
或telnet <域名> <端口號>
命令測試網絡的連通性。
解決方案:請參見Linux系統的ECS實例內部無法正常解析域名。
檢查實例狀態
實例的狀態為運行中,才能連接云數據庫MongoDB實例。
- 常見原因:磁盤空間耗盡。
- 解決方案:請參見解決因磁盤空間耗盡導致的鎖定或無法寫入問題。
檢查第三方工具
當第三方工具(如Navicat、Compass等工具)無法連接云數據庫MongoDB實例時,有可能是實例的設置或者第三方工具的設置不正確等原因造成的。您需要確保實例和第三方工具的設置都正確,才能通過第三方工具連接云數據庫MongoDB實例。
- 連接成功:第三方工具的設置不正確。請根據您實際使用的工具,具體排查工具的各種設置。
- 連接失敗:實例的設置不正確。請參照本文排查白名單設置、網絡環境、實例連接地址、域名解析情況和實例狀態。