mgo 连接需要授权登录的mongodb
使用golang mgo连接到需要授权登录的mongodb
- 测试环境
- mongodb设置
- golang mgo环境
- 用例代码
搭建测试环境
windows 7, virtualbox, ubuntu 16.04LTS
- 安装[virtualbox]
- 安装虚拟机[ubuntu]
安装golang
sudo apt-get update sudo apt-get install golang
安装mongodb
sudo apt-get install mongodb mogod --version
db version v2.6.10
2016-09-29T16:54:46.199+0800 git version: nogitversion
2016-09-29T16:54:46.200+0800 OpenSSL version: OpenSSL 1.0.2g 1 Mar 2016
mongodb设置
上面步骤安装mongdb结束之后会自动启动
ps -aef | grep mongod
mongodb 626 1 0 01:05 ? 00:05:01 /usr/bin/mongod –config /etc/mongodb.conf
可以看到mongod使用 /etc/mongdb.conf启动
sudo vi /etc/mongodb.conf
1 # mongodb.conf
2
3 # Where to store the data.
4 dbpath=/var/lib/mongodb
5
6 #where to log
7 logpath=/var/log/mongodb/mongodb.log
8
9 logappend=true
10
11 bind_ip = 192.168.6.1
12 port = 27017
13
14 # Enable journaling, http://www.mongodb.org/display/DOCS/Journaling
15 #journal=true
16
17 # Enables periodic logging of CPU utilization and I/O wait
18 #cpu = true
19
20 # Turn on/off security. Off is currently the default
21 #noauth = true
22 auth = true
上面是我修改后的,改动了bind_ip, auth
但是改动之前,需要首先建立一个管理员账号,否则auth实际上是不起作用的
使用mongo连接本机数据库,添加管理员账号
mongo
use admin
db.addUser({user:"username",
pwd: "yourpassword",
roles: [ "userAdminAnyDatabase",
"dbAdminAnyDatabase",
"readWriteAnyDatabase"
]
})
quit()
sudo service mongodb stop
这样在添加了管理员账号之后,将默认方式启动的mongodb服务停止
ps -aef | grep mongodb
修改 /etc/mongodb.conf
如果bind_ip 127.0.01 只能本虚拟机访问
可以更改默认数据库文件目录,但是需要保证mongodb有权限rw
最重要的需要把auth=true
service mongodb start
mongo -u "useryouadd" --authenticationDatabase admin -p
输入刚刚设置的密码,看看是否可以连接上
golang mgo环境
sudo apt-get install golang
cd
mkdir GoTest
export GOPATH=`pwd`
go get gopkg.in/mgo.v2
echo "export GOPATH=`pwd`"
上面命令执行结束,golang,mgo都已经安装好了
用例代码
cd $GOPATH
mkdir mtest
cd mtest
mgo 提供了几个建立session的接口,我使用了DialWithInfo
package main
import (
"fmt"
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
"time"
)
func main() {
dialInfo := &mgo.DialInfo{
Addrs: []string{"192.168.6.122"},
Direct: false,
Timeout: time.Second * 1,
Database: "yourdatabase",
Source: "admin",
Username: "username",
Password: "password",
PoolLimit: 4096, // Session.SetPoolLimit
}
session, err := mgo.DialWithInfo(dialInfo)
if nil != err {
panic(err)
}
defer session.Close()
}
下一步就是CRUD
未完...