在远程服务器上(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底层调用的方法没有修改吧。截图如下: