前言
最近的项目中需要用到MongoDB,所这段时间需要学习知道怎么去使用这个数据库。
这里我先简单的介绍一下什么是MongoDB,后面还会详细的介绍:
MongoDB 是一个面向文档的通用型数据库,拥有 MySQL 等关系型数据库常用功能。除了能够创建、读取、更新和删除数据之外,也还提供了一些拓展的功能,
如索引、聚合、特殊的集合类型(如时间有限的集合)、分片和集群,是一个易于使用、便于拓展的数据库。也正因为它的这些特性,也是前端童鞋使用得比较
多的一种数据库。
一、在CentOS中安装MongoDB
1.1、简介
MongoDB 有两个版本类型:开源社区版(Community Edition)和企业版(Enterprise),功能上两者并没有什么区别,企业版主要是提供了更多的管理服务,
有更高级的安全性,如LDAP 身份验证、Red Hat 标识管理认证。这里主要讨论开源社区版。官方提供了mongodb-org软件包,其中包含了 MongoDB 几乎所有
所需功能,使用系统自带的yum
软件包管理器可以非常方便地进行安装。
1.2、配置资源库
为了确保系统能直接从指定地址获取软件包,创建/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
二、启动
2.1、简介
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 命令来设置
这些系统服务开机时启动。
2.2、启动命令及配置开机启动
1)启动命令
MongoDB 安装完后默认会在 /etc/rc.d/init.d
下生成启动脚本 mongod,所以我们可以通过下面命令启动 MongoDB 服务器:
sudo service mongod start
2)如需要设置开机启动可以执行下面脚本
sudo chkconfig mongod on
3)查看是否启动
方法一:
使用命令:netstat -lanp |grep ""27017"
方式二:
访问 /var/log/mongodb/mongod.log 日志文件,如果看到 [initandlisten] waiting for connections on port <port> 的日志则说明启动成功。
三、MongoDB设置
3.1、MongoDB配置文件
每个 mongod 服务器进程都需要有自己的数据存储路径,默认是 /var/lib/mongo。如果需要启动多个服务器进程,则可以指定不同的路径来启动。
启动的默认配置文件是 /etc/mongod.conf。我们可通过这个配置文件实现所需配置:官方配置文件详解
# 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
则外网机器无法直接连接此服务器进程。
四、认证授权(MongoDB创建用户个库)
4.1、简介
MongoDB 服务器进程默认启动后,并无任何认证机制,即任何用户都可随意连接数据库进行读写操作。MongoDB 有个比较特殊的数据库 admin,
专门用来存储数据库管理员信息的。在 MongoDB 里是有不同的角色的,每种角色只能拥有相应的权限,用户也能自定义角色。官方详解
4.2、认证授权步骤
为了启用认证机制,我们需要创建两个用户:拥有 userAdminAnyDatabase 角色的用户、对应数据库读写权限 readWrite 的用户,如:
先启动不需要认证的服务器进程,用 mongo shell 直接进入配置:
1)添加一个超级用户“root”
步骤一:打开Mongo shell
mongo
步骤二:进入admin表
use admin
步骤三:创建一个超级管理账户
步骤三:查看用户是否创建成功
表示创建成功了!
五、MongoDB权限
1)数据库用户角色:read、readWrite
read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
2)数据库管理角色:dbAdmin、dbOwner、userAdmin
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
3)集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限
4)备份恢复角色:backup、restore
5)所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
6)超级用户角色:root
. root:只在admin数据库中可用。超级账号,超级权限
注意:这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)