無法連接遠程MongoDB數據庫

在遠程服務器上(CentOS6.5)安裝 MongoDB(版本3.2.10),按照如下命令啓動:

#!/bin/bash
### start mongodb shell
### dbpath 表示執行數據庫存放目錄(若不指定,則默認值爲/data/db)
### fork 表示以Daemon方式運行
### auth 表示需要帳號密碼
### 【注意】如果指定fork參數,則必須指定logpath參數
/opt/mongodb/mongodb-3.2.10/bin/mongod --auth --dbpath=/opt/mongodb/mongodbdata --fork --logpath=/opt/mongodb/mongodblog

也添加了用戶/密碼,並添加了測試庫、測試集合、測試數據;

在服務器(即安裝MongoDB的機器)上登錄ok,查詢數據ok;

也確認服務器的該端口對公網開放;


但是用MongoVUE遠程連接,死活連不上,報錯如下:


報錯爲認證失敗,網上查詢,認證失敗,就是帳號或密碼錯誤;

但經過確認,在服務器上登錄、查詢均沒有問題,說明肯定不是這個錯誤。

又說是因爲服務器啓動的時候,缺少 bind_ip參數,如果不加該參數,則允許訪問的地址均爲本地地址。

經筆者測試,即使加上該參數,依然無法連接。


有找到一篇博文,說MongoVUE暫不支持3.0以上的MongoDB版本,

博文地址爲:https://www.oschina.net/question/1473401_2160373

搞不明白,因此現在該問題依然未解決。


另外,使用Java連接遠程MongoDB也是相同的問題,無法連接,報錯相同。代碼如下:

public static void main(String[] args) {
	List<MongoCredential> credentials = new ArrayList<MongoCredential>();
	credentials.add(MongoCredential.createMongoCRCredential("zhangsan", "demo1", "123456".toCharArray()));
	
	ServerAddress serverAddress = new ServerAddress("localhost", 27017);
	MongoClient mongoClient = new MongoClient(serverAddress, credentials);
	
	MongoDatabase db = mongoClient.getDatabase("demo1");
	
	//操作
	MongoCollection<Document> collection = db.getCollection("person");
	FindIterable<Document> it = collection.find();
	MongoCursor<Document> iterator = it.iterator();
	while(iterator.hasNext()) {
		Document doc = iterator.next();
		System.out.println(doc.toJson());
	}
	
	// 關閉數據庫連接
	mongoClient.close();
}



【2016-11-04 晚上11點】

代碼無法連接MongoDB的錯誤,終於找到原因:

使用createScramSha1Credential方法替換createMongoCRCredential方法,即可正常連接MongoDB。

至於原因,不得而知。

可參考API:http://api.mongodb.com/java/current/com/mongodb/MongoCredential.html

博文也有說明:http://stackoverflow.com/questions/28857921/cannot-connect-to-mongodb-3-0-0-by-using-c-sharp-driver-1-10


通過另一MongoDB客戶端Robomongo0.9.0的連接界面,再猜測MongoVUE無法連接MongoDB,估計也是由於MongoVUE底層調用的方法沒有修改吧。截圖如下:





發佈了112 篇原創文章 · 獲贊 118 · 訪問量 129萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章