zoukankan      html  css  js  c++  java
  • 在ubuntu 18上安装MongoDB

    本文介绍 MongoDB Community EditionUbuntu 下的安装和常见配置方法。文中操作基于 MongoDB Community Edition 4.2.2Ubuntu 18.04 。对于不同的系统和版本,操作方式和方法可能会有不同。

    基础安装

    本节简单讲解在Ubuntu下 MongoDB 基本的安装步骤。

    1. 安装GPG公钥
      wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
      
    2. 添加APT源
      echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
      
    3. 重载本地包数据库
      sudo apt-get update
      
    4. 安装mongoDB
      sudo apt-get install -y mongodb-org
      
    5. 检查mongoDB包安装信息
      apt list --installed mongodb*
      
      正常情况下,可以看到以下信息
      mongodb-org/bionic,now 4.2.2 amd64 [installed]
      mongodb-org-mongos/bionic,now 4.2.2 amd64 [installed]
      mongodb-org-server/bionic,now 4.2.2 amd64 [installed]
      mongodb-org-shell/bionic,now 4.2.2 amd64 [installed]
      mongodb-org-tools/bionic,now 4.2.2 amd64 [installed]
      
    6. 启动系统服务
      sudo systemctl enable mongod.service
      sudo systemctl start mongod.service
      
    7. 检查服务状态
      systemctl status -l mongod.service
      
      如果 mongod.service 的状态不是 active(running) ,可以根据 systemctl status 命令的输出和日志文件 /var/log/mongodb/mongod.log 来排查问题原因。

    客户端连接

    MongoDB 服务启动成功后,可以使用 MongoDB JavaScript Shell 客户端来访问数据库了:

    mongo --host 127.0.0.1 --port 27017
    

    默认配置下,MongoDB 监听本地localhost27017端口。此时,启动 MongoDB JavaScript Shell 时也可以省略地址和端口参数。连接成功后就可以操作数据库了。比如查看现有的database:

    > show dbs;
    admin   0.000GB
    config  0.000GB
    local   0.000GB
    

    安装操作详解

    接下来会对安装过程做进一步讲解,基于这部分内容,可以对 MongoDB 的安装和基本配置进行部分自定义。

    安装指定组件和版本

    在一节内容中,可以看到当 MongoDB 的包安装完成后,可以看到多个组件被安装。这些组件分别是

    包名 描述
    mongodb-org 包含所有组件包的元包,安装此包会包含以下所有组件
    mongodb-org-server MongoDB 服务器,主要是 mongod 进程程序和相关资源和脚本
    mongodb-org-mongos mongos 进程,用于在 MongoDB 分片集群中将客户端请求分发到各服务节点
    mongodb-org-shell MongoDB JavaScript Shell 客户端
    mongodb-org-tools 其他 MongoDB 工具, mongoimport, bsondump, mongodump, mongoexport,mongofiles,mongorestore,mongostat,和mongotop

    可以根据需要安装指定的组件,比如只安装 MongoDB JavaScript Shell 来访问远程服务:

    sudo apt install mongodb-org-shell
    

    系统服务配置

    MongoDB 服务安装完成后,会创建系统服务文件 /lib/systemd/system/mongod.service。可以根据需要修改此文件。

    比如,服务文件里包含以下一些配置:

    [Service]
    User=mongodb
    Group=mongodb
    ExecStart=/usr/bin/mongod --config /etc/mongod.conf
    

    UserGroup指定了启动 MongoDB 服务进程所使用的用户mongodb和同名用户组mongodb。这个用户和用户组是在安装 MongoDB 时自动创建的。可以在必要时指定为期望的值。当修改后,要注意同时修改相关目录和文件的权限。

    ExecStart指定了启动服务进程的命令,可以看到这里显示指定了使用配置文件/etc/mongod.conf。可以修改这条配置项让数据库使用其他配置文件,也可以添加其他启动参数。

    如果希望在同一台服务器上启动多个 MongoDB 服务,可以复制服务文件,并修改后启用。

    如果是在启用服务之后对服务文件做了修改,需要重载配置再重启服务:

    sudo systemctl daemon-reload
    sudo systemctl restart mongod.service
    

    基础配置

    本节介绍一些 MongoDB 配置文件中常用的配置项。默认情况下,这些配置保存在文件/etc/mongod.conf中。当配置项修改后,需要重启服务才能生效。

    指定监听地址和端口

    默认情况下,非分片集群下的 MongoDB 监听 localhost 上的 27017端口。在没有显示指定配置文件时,这个是由配置文件中的 net.portnet.bindIp配置顶控制:

    # network interfaces
    net:
        port: 27017
        bindIp: 127.0.0.1
    

    这时, MongoDB 只接受来自于同一台服务器上的本地连接,所以通常都会需要修改监听的地址。比如希望监听所有的IPv4地址,就可以将 net.bindIp 项的值由 127.0.0.1 修改为 0.0.0.0。如果需要调整监听的端口,则将 net.port 配置顶的值由 27017 修改为期望值。

    修改数据存储

    MongoDB 的数据存储目录是由配置文件中的 storage.dbPath 配置项来控制的。默认情况下数据保存在 /var/lib/mongodb 目录下:

    # Where and how to store data.
    storage:
      dbPath: /var/lib/mongodb
    

    可以根据自己的需要修改数据目录。在修改之前要确保目录已经存在,并且权限设置正确。目录的所有者应当为 mongodb:mongodb,或者启动进程的用户有读写权限。

    如果数据库之前已经有数据了,需要把之前数据目录下的文件都复制到新目录下,否则 MongoDB 会新建空的数据文件结构。

    修改日志配置

    默认情况下 MongoDB 日志记录在文件 /var/log/mongodb/mongod.log 中。这个是由 systemLog 相关配置项决定的:

    # where to write logging data.
    systemLog:
      destination: file
      logAppend: true
      path: /var/log/mongodb/mongod.log
    

    如果要修改日志文件位置,就根据需要修改 systemLog.path 配置项的值。不过要注意日志文件所在目录的权限。运行 MongoDB 进程的用户需要有日志目录的读写权限。默认情况下使用的用户是 mongodb:mongodb

    如果希望日志文件可以轮转(log rotate),则需要添加配项 systemLog.logRotate:

        # where to write logging data.
        systemLog:
          destination: file
          logAppend: true
          logRotate: true
          path: /var/log/mongodb/mongod.log
    

    访问控制

    默认配置下,MongoDB 是没有开启访问控制的。此时,用户访问数据库不需要做验证,并且拥有所有的权限。所以在安装完成后,应当立刻开启数据库的访问控制。

    1. 连接到本地数据库后,在客户端执行以下命令
      use admin
      db.createUser(
        {
          user: "admin",
          pwd: passwordPrompt(),
          roles: [
            { role: "userAdminAnyDatabase", db: "admin" },
            "readWriteAnyDatabase"
          ]
        }
      )
      
      此命令用在 admin 数据库下创建一个名为 admin 的账号。createUser方法参数JSON中的 pwd 字段用来指定账号的密码。这里指定的是另一个方法 passwordPrompt。这个方法在执行createUser命令时,会提示并等待用户在客户端输入密码。roles指定用户的角色和权限。这里给 admin 授权的第一个权限是 admin 数据库的管理权限。admin数据库是 MongoDB 用来管理用户的,所以有了这个权限,就可以用来管理数据库的其他账号了。第二个权限 readWriteAnyDatabase 是对所有数据库的读写权限。
    2. 在Ubuntu终端中关闭 MongoDB 服务:
      sudo systemctl stop mongod.service
      
    3. 在配置文件将security.authorization配置顶设置为true来开启访问控制:
      security:
        authorization: enabled
      
    4. 启动 MongoDB 服务来使配置生效:
      sudo systemctl start mongod.service
      
    5. 使用admin登录
      mongo -u admin -p
      
    6. 给应用数据库创建账号,比如app_db下创建账号app_admin:
      use app_db
      db.createUser(
        {
          user: "app_admin",
          pwd: passwordPrompt(),
          roles: [ "readWrite" ]
        }
      )
      

    这里创建的账号是有app_db下的读写权限readWrite的。如果想创建只读账号,则需要指定权限为read

    1. 使用普通账号登录
      mongo --authenticationDatabase app_db -u app_admin -p
      
      和之前使用admin账号登录不同,这里指定了authenticationDatabase参数值为app_db,因为app_admin是在app_db下创建的账号。

    参考资料

  • 相关阅读:
    案例分析
    202103226-1 编程作业
    阅读任务
    准备工作
    结对作业
    案列分析
    202103226-1 编程作业
    《构建之法》有感
    准备工作
    案例分析作业
  • 原文地址:https://www.cnblogs.com/mithrilon/p/12056301.html
Copyright © 2011-2022 走看看