前言
MongoDB 是一个面向文档的通用型数据库,拥有 MySQL 等关系型数据库常用功能。除了能够创建、读取、更新和删除数据之外,
也还提供了一些拓展的功能,如索引、聚合、特殊的集合类型(如时间有限的集合)、分片和集群,是一个易于使用、便于拓展的数据库。
也正因为它的这些特性,也是前端童鞋使用得比较多的一种数据库。蚂蚁金服的Basement Object 数据存储也是类似 MongoDB 的一种存储方式。
下面我们来看看如何在 Linux 系统(以 centos 系统为例)下快速地搭建起 MongoDB 服务并投入使用。
安装
MongoDB 有两个版本类型:开源社区版(Community Edition)和企业版(Enterprise),功能上两者并没有什么区别,
企业版主要是提供了更多的管理服务,有更高级的安全性,如LDAP 身份验证、Red Hat 标识管理认证。这里主要讨论开源社区版。
官方提供了mongodb-org软件包,其中包含了 MongoDB 几乎所有所需功能,使用系统自带的yum软件包管理器可以非常方便地进行安装:
配置资源库
为了确保系统能直接从指定地址获取软件包,创建/etc/yum.repos.d/mongodb-org-3.4.repo文件,填入如下内容配置 MongoDB 资源库:
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
执行安装命令
sudo yum install -y mongodb-org
系统配置
Linux 默认会限制系统资源的使用,如进程创建的子进程数量、网络连接数等,这样可以防止单个用户占用过多的系统资源,
可通过 ulimit -n <value> 来根据自己需求设置,具体可参考UNIX ulimit Settings。
启动
MongoDB 安装完后,默认会生成很多命令,如 mongo、mongod、mongodump、mongooplog等。
其中比较常用的有 mongod(用于启动 MongoDB 服务器)、
mongo(提供强大的类似 javascript 环境的 mongo shell 交互式功能)。
如果简单地通过执行 mongod 命令来启动 MongoDB 服务器,则无法使它在后台运行,控制台关了服务也自动停止了,
也无法快速启动指定配置的服务,更不能做到开机自启动。Centos 提供了 service 命令来帮我们快速地启动一些服务,
不过它其实就是跑一个指定的 shell 脚本。当我们输入 service 命令时,linux 会去 /etc/rc.d/init.d 下去找这个脚本运行,
init.d 下面放了很多这种脚本(如常见的 httpd)。而当我们需要设置开机自启动时也可以通过 chkconfig 命令来设置这些系统服务开机时启动。
MongoDB 安装完后默认会在 /etc/rc.d/init.d 下生成启动脚本 mongod,所以我们可以通过下面命令启动 MongoDB 服务器:
sudo service mongod start
如需要设置开机自启动可以执行下面脚本:
sudo chkconfig mongod on
访问 /var/log/mongodb/mongod.log 日志文件,如果看到 [initandlisten] waiting for connections on port <port> 的日志则说明启动成功。
MongoDB 设置
每个 mongod 服务器进程都需要有自己的数据存储路径,默认是 /var/lib/mongo。如果需要启动多个服务器进程,
则可以指定不同的路径来启动。启动的默认配置文件是 /etc/mongod.conf,我们可通过这个配置文件实现所需配置:Configuration File Options
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# Where and how to store data.
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
# how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1 # Listen to local interface only, comment to listen on all interfaces.
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options
#auditLog:
#snmp:
有一个需要注意的配置是 net 下的 bingIp,如果设置 bindIp: 127.0.0.1 则外网机器无法直接连接此服务器进程。
service mongod restart 重启
chkconfig mongod on 开机自动启动
mongo 127.0.0.1:27017/admin -u hanks -p 连接mongodb数据库 root数据库
mongo 127.0.0.1:27017/ks_taotaoju -u hanks -p
看了一下MongoDB 的服务监听的地址,因此你使用192.168.6.60,是链接不上的,会被拒绝,这个一个元应
mongod文件添加如下行,已存在请修改
vim /etc/mongod.conf
bind_ip = 192.168.6.60
service mongod restart 重启
配置文件里有bind ip 远程访问需要修改成外网IP 或者内网的对外IP。
然后打开相应的端口。至于客户端连接
如果是最新的3.0以上版本,参考http://segmentfault.com/q/1010000002776398
认证授权
MongoDB 服务器进程默认启动后,并无任何认证机制,即任何用户都可随意连接数据库进行读写操作。MongoDB 有个比较特殊的数据库 admin,
专门用来存储数据库管理员信息的。在 MongoDB 里是有不同的角色的,每种角色只能拥有相应的权限,用户也能自定义角色。MongoDB Built-In Roles
为了启用认证机制,我们需要创建两个用户:拥有 userAdminAnyDatabase 角色的用户、对应数据库读写权限 readWrite 的用户,如:
先启动不需要认证的服务器进程,用 mongo shell 直接进入配置:
use admin
db.createUser(
{
user: "myUserAdmin",
pwd: "abc123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
修改 /etc/mongod.conf 配置,加入下面配置并重启,则启动了需要认证才能操作数据库的服务器进程:
security:
authorization: "enabled"
通过 mongo 命令进入 shell 后,选择对应的数据库,加入拥有 readWrite 权限的用户:
use test
db.createUser(
{
user: "myTester",
pwd: "xyz123",
roles: [ { role: "readWrite", db: "test" }]
}
)
重启:
sudo service mongod restart
连接指定远程数据库
通过上述配置和启动完成后,可以在其他机器通过命令来远程连接到启动的 MongoDB 服务器进程,
并在 mongo shell 里做相应的数据库操作:mongo shell
mongo serverip:port/dbname -u username -p password