MongoDB 3.4简要教程

说明

MongoDB 3.4 的四个组件说明:

  • mongodb-org-server: 包含MongoDB守护进程和相关的配置和初始化脚本。
  • mongodb-org-mongos: 包含mongos的守护进程。
  • mongodb-org-shell: 包含mongo shell。
  • mongodb-org-tools: 包含MongoDB的工具: mongoimport, bsondump, mongodump, mongoexport, mongofiles, mongooplog, mongoperf, mongorestore, mongostat, and mongotop。

安装

yum安装

  • 创建/etc/yum.repos.d/mongodb-org-3.4.repo文件,内容如下
[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
  • 安装
$ yum install -y mongodb-org
  • 配置SELinux

    • 如果ELinux启动了enforcing模式

    $ semanage port -a -t mongod_port_t -p tcp 27017

  • 如果禁用SELinux (修改配置文件的方式必须重启系统)

    $ vim /etc/selinux/config

    • 修改配置

      SELINUX=disabled
      或者
      SELINUX=permissive

      • setenforce,此方法不用重启系统

      $ setenforce 0

源码安装

  • Setp 1 获取压缩包
    • 我们可以将下载好的压缩包上传到服务器
    • 或者通过wget获取压缩包

此处我们将我们下载好的压缩包mongodb-linux-x86_64-rhel70-3.4.4.tgz上传至服务器

  • Setp 2 解压压缩包
$ tar -zxvf mongodb-linux-x86_64-rhel70-3.4.4.tgz /home
$ cd mongodb-linux-x86_64-rhel70-3.4.4
$ mkdir /home/mongodb
$ cp -R * /home/mongodb
  • Setp 3 配置MongoDB
$ mkdir /home/mongodb/data
$ mkdir /home/mongodb/log/mongolog

mongodb配置文件,mongo.cfn。需要注意,配置文件的缩进是空格,使用制表符Tab缩进会报错

systemLog: 
    destination: file
    path: "/home/mongodb/log/mongolog/mongod.log"
    logAppend: true
storage:
    journal: 
        enabled: true
    dbPath: /home/mongodb/data
processManagement:
    fork: true #后台进程方式启动
    pidFilePath: "/home/mongodb/data/mongod.pid"
net: 
    bindIp: 127.0.0.1 #此处修改为服务器IP,否则本机以外无法访问
    port: 27017
setParameter: 
    enableLocalhostAuthBypass: false
  • Setp 4 环境变量配置
$ vim /etc/profie.d/mongo.sh

编辑mongo.sh文件,添加内容:export PATH=$PATH:/home/mongodb/bin

$ source /etc/profile.d/mongo.sh
  • Setp 5 启动MongoDB

直接命令行配置启动

$ mongod --dbpath=/home/mongodb/data/ --logpath=/home/mongodb/log/mongolog/mongo.log --logappend --auth --fork

使用配置文件配置启动

$ mongod -f /home/mongodb/mongo.cfn

启动

  • 执行启动MongoDB服务的命令
$ service mongod start

停止MongoDB服务:service mongod stop
重启MongoDB服务:service mongod restart

  • 查看MongoDB启动是否成功,查看日志/var/log/mongodb/mongod.log文件,是否存在以下一行内容
[initandlisten] waiting for connections on port <port>

为当前MongoDB服务的端口,默认为27017。端口可以在/etc/mongod.conf主配置文件中进行配置,只要配置文件修改均需要重启MongoDB服务方可生效。

  • 设置MongoDB服务随操作系统启动
$ chkconfig mongod on

维护

  • 放行MongoDB端口
$ firewall-cmd --zone=public --add-port=27017/tcp --permanent
$ firewall-cmd --reload
  • MongoDB数据库存放目录为/var/lib/mongo
  • 删除MongoDB的安装包
$ yum erase $(rpm -qa | grep mongodb-org)
  • 删除MongoDB数据库及日志
$ rm -r /var/log/mongodb
$ rm -r /var/lib/mongo

Shell 客户端

登录Mongo Shell

连接MongoDB

$ mongo --host 192.168.0.100

基本命令

  • 查看数据库
$ show dbs;
  • 切换数据库
    在进行任何集合操作前,都必须先切换到一个数据库
$ use admin;
switched to db admin
  • 查看集合
    等同于关系型数据库的表
$ show collections;
system.version
  • 退出Shell
$ exit;

权限

说明

MongoDB一路走来,各个版本权限管理差别较大,本文讲解的权限是基于v3.4.4版本,如果使用低于或高于本文所用版本,可能存在差异。

权限、用户、角色管理均基于Shell,所以所有操作均需要保证已登录Shell客户端
所有用户均储存在admin数据库下的db.system.users集合

用户角色权限

  • 数据库用户角色

    • read
      仅拥有数据库读权限

    • readWrite
      数据库读写权限

  • 数据库管理角色

    • dbAdmin
      可以对数据库的system.indexes、system.namespaces、system.profile 集合进行操作

      • collStats
      • dbHash
      • dbStats
      • find
      • killCursors
      • listIndexes
      • listCollections
      • dropCollection、createCollection仅提供给system.profile
    • dbOwner
      对数据库的拥有者、角色提供管理权限,同时提供readWrite、dbAdmin、userAdmin角色的权限

    • userAdmin
      当前数据库(使用use切换的目标数据库)提供,创建、修改角色及用户的权限。
      明确的提供以下操作:

      • changeCustomData
      • changePassword
      • createRole
      • createUser
      • dropRole
      • dropUser
      • grantRole
      • revokeRole
      • viewRole
      • viewUser
  • 所有数据库角色

    • userAdminAnyDatabase
      仅能够进行本地连接Shell,仅拥有userAdmin角色的权限,没有readWrite权限

    • dbAdminAnyDatabase
      仅能够进行本地连接Shell,仅拥有dbAdmin角色的权限,没有readWrite权限

    • readAnyDatabase
      仅能够进行本地连接Shell,仅拥有read权限

    • readWriteAnyDatabase
      仅能够进行本地连接Shell,仅拥有 readWrite权限

  • 超级用户角色

    • root
      提供所有角色的操作权限

开启权限

配置文件/home/mongodb/mongo.cfn中添加一下代码,开启权限验证

security:
   authorization: "enabled"

创建超级管理员

首先创建一个超级管理员

> use admin
> db.createUser(
  {
    user: "admin",
    pwd: "admin123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

user:用户名
pwd:用户密码
roles:一组角色设置(对象)
role:角色名
db:角色所控制的数据库名

userAdminAnyDatabase:仅能通过本地连接管理用户及角色
官方文档地址:https://docs.mongodb.com/manual/reference/built-in-roles/#userAdminAnyDatabase
超级管理员创建完成后,退出命令行,重启MongoDB

认证

重启MongoDB后,进入Shell客户端,在命令行进行认证

$ mongo --host 192.168.0.100 --port 27017 -u "admin" -p "admin123" --authenticationDatabase "admin"
ationDatabase "admin"
MongoDB shell version v3.4.4
connecting to: mongodb://192.168.0.202:27017/
MongoDB server version: 3.4.4
>

-u:用户名
-p:密码
–authenticationDatabase:刚刚创建admin用户时,role指定userAdminAnyDatabase角色,对应的db指定的数据库

如果直接使用$ mongo –host 192.168.0.100 –port 27017连接Shell客户端,则需要成功连接后,使用db.auth(“admin”, “admin123”)用户完成认证

删除用户

  • 需要在admin数据库下进行
    Shell:
> use admin;
  • 删除所有数据库中匹配用户名的用户(需要root权限)
> db.system.users.remove({user:"admin"});
  • 仅会删除当前数据库中指定用户名的用户(不需要root权限,有当前数据操作权限即可)
> db.dropUser("admin")

修改密码

  • 需要在admin数据库下进行
    Shell:
> use admin;
  • 进行密码修改
> db.updateUser( "root",{pwd:"root123"})

用户管理相关文档地址:https://docs.mongodb.com/manual/reference/method/js-user-management/

你可能感兴趣的:(数据库)