在遠程伺服器上(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底層調用的方法沒有修改吧。截圖如下: