在ubuntu下安装和配置mongodb


#MongoDB#


2014-02-23

MongoDB是一種文件導向数据库管理系统,由C++撰寫而成,以此来解决应用程序开发社区中的大量现实问题。2007年10月,MongoDB由10gen團隊所發展。

MongoDB的属于面向文档数据库。松本行弘在《代码的未来》里这样描述文档数据库:

所谓面向文档数据库,可以理解为是将JSON、XML这样的文档直接进行数据化的形式,其特点包括:不需要schema(数据库结构定义)、支持由多台计算机进行并行处理的“水平扩展”等。

在MongoDB中有三个重要的概念:数据库、集合、文档。其中“数据库”和关系型数据库(RDB)中的“数据库”概念差不多,“集合”相当于RDB中的“表”,“文档”相当于RDB中表的一行记录。

安装和配置:

MongoDB在32位系统中有很大的限制,所以建议在64位OS下使用。笔者使用的系统是Linux Mint 16(基于ubuntu的一个发行版)。 当前比较流行的版本是2.4系列,所以先查看当前软件仓库中该软件的版本:

$ sudo apt-cache showpkg  mongodb
Package: mongodb
Versions:
1:2.4.6-0ubuntu5 (/var/lib/apt/lists/mirrors.163.com_ubuntu_dists_saucy_universe_binary-amd64_Packages)
……
……

既然是2.4系列,我们就直接安装了:

$ sudo apt-get install mongodb

查看版本:

$ mongod --version
db version v2.4.6

如果要安装其他的版本,可以在官方现在相应的安装包自定义安装,也可以参考资料[1]进行安装。

MongoDB的配置文件在/etc/mongodb.conf,默认的数据存放位置(dpath)/var/lib/mongodb,默认的端口27017。可以用service启动和关闭mongodb。

有一点值得注意的是,mongodb的默认字符集是utf-8,使用者一定要注意字符集转换。

在配置文件中找到:

# Turn on/off security.  Off is currently the default
#noauth = true
#auth = true

去掉#auth = true之前的#。这就使得在连接mongodb后必须给出用户名和密码以认证,否则无法访问数据。如此,可以增加安全性。

关于配置文件的各个选项,请参考资料[2]。

创建一个管理员:

查看数据目录中的文件:

$ ls /var/lib/mongodb/
journal  local.0  local.ns  mongod.lock  _tmp

使用mongo shell:

$ mongo
MongoDB shell version: 2.4.6
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
    http://docs.mongodb.org/
Questions? Try the support group
    http://groups.google.com/group/mongodb-user
>

我们已经配置了auth=true,第一次操作mongodb时不需要认证,但是有必要添加一个管理员。

建立一个全局管理员: 在mongo终端中输入:

use admin

会输出:

switched to db admin

数据库admin用来存储mongodb用户信息,这些用户一般具有很大的权限。 这时候我们可以在admin数据库中操作了,我们要添加一个管理员用户。

db.addUser( { user: "root",
                  pwd: "123456",
                  roles: [
                        "readAnyDatabase",
                        "userAdminAnyDatabase",
                        "readWriteAnyDatabase",
                        "dbAdminAnyDatabase",
                        "clusterAdmin"
                  ]
                } )

执行:

show users

将显示:

> show users
{
    "_id" : ObjectId("530982366c9d09a156f47aa0"),
    "user" : "root",
    "pwd" : "34e5772aa66b703a319641d42a47d696",
    "roles" : [
        "readAnyDatabase",
        "userAdminAnyDatabase",
        "readWriteAnyDatabase",
        "dbAdminAnyDatabase",
        "clusterAdmin"
    ]
}

使用下面的命令查看当前数据库下有哪些集合(相当于关系数据库中的表):

show collections

结果如下:

> show collections
system.indexes
system.users

然后,使用exit推出 mongo shell:

> exit
bye

此时我们看一下数据目录的变化:

$ ls /var/lib/mongodb/
admin.0  admin.1  admin.ns  journal  local.0  local.ns  mongod.lock  _tmp

基本的数据操作:

要求:在test数据库下创建集合users并保存1个user的信息。 首先强烈建议为每个数据库都添加几个权限在本数据库范围内的用户。 在test数据库中添加集合user,并插入一个用户的信息:

$ mongo
MongoDB shell version: 2.4.6
connecting to: test
> use admin
switched to db admin
> db.auth("root","123456")
1
> use test
switched to db test
> show collections
> ;
> db.addUser( { user: "letian",
...                   pwd: "123456",
...                   roles: [
...                         "readWrite"
...                   ]
...                 } )
{
    "user" : "letian",
    "pwd" : "05c21d1ed0085ebd4d608381740e7104",
    "roles" : [
        "readWrite"
    ],
    "_id" : ObjectId("5309887b327ffceba6c59218")
}

现在我们在test创建users集合并添加数据:

> use test
switched to db test
> db.auth("letian","123456")
1
> db.users.insert({"name":"john","age":20,"email":"111@gmail.com"})
> db.users.find()
{ "_id" : ObjectId("53098916327ffceba6c59219"), "name" : "john", "age" : 20, "email" : "111@gmail.com" }

GUI管理工具:

笔者推荐 robomongo ,开源跨平台。

6、 题外话:windows下如何将mongodb配置为服务

找到mongod.exe,以管理员运行cmd,执行:

mongod.exe --config I:\mongodb\bin\mongod.conf --serviceDisplayName mongo-letian --auth --install

--config用来制定配置文件的位置,--serviceDisplayName指定服务的显示名称,--auth是说连接mongodb时需要认证,--inistall就是安装服务。

资料:

[1]: install mongodb on ubuntu
[2]: MongoDB configuration options


( 本文完 )