在遠程服務器上(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
通過另一MongoDB客戶端Robomongo0.9.0的連接界面,再猜測MongoVUE無法連接MongoDB,估計也是由於MongoVUE底層調用的方法沒有修改吧。截圖如下: