写在前面:

  1. 本文在部分内容方面,参考了CSDN部分博主的文章内容,如有冒犯请联系博主协商处理。
  2. 本文所有安装和配置的内容都经博主实测有效,如有错误的地方,欢迎大家指正学习。
  3. 文章创作不易,请各位看官给个三连,博主在此先行感谢了!!!

一、虚拟机环境说明

1、安装前准备

  • 安装环境:

    虚拟机版本版本说明安装包
    CentOS 7.xMongoDB-7.0.12mongodb-linux-x86_64-rhel70-7.0.12.tgz
  • 数据库手册:What is MongoDB?

2、数据库软件

3、数据库工具

  • 命令行工具:mongosh

    注意: mongodb7.0.x 版本开始不主动提供命令行工具 mongo,需要自行安装 mongosh

二、源码安装 MongoDB

1、安装配置环境

  • 上传安装包至服务器,安装依赖包,解压安装包

    $ ll -h mongodb-linux-x86_64-rhel70-7.0.12.tgz
    -rw-r--r-- 1 root root  81M 85 09:55 mongodb-linux-x86_64-rhel70-7.0.12.tgz
    
    # 解压安装包
    $ tar -zxvf mongodb-linux-x86_64-rhel70-7.0.12.tgz
    
    # 重命名移动至指定目录
    $ mv mongodb-linux-x86_64-rhel70-7.0.12  /usr/local/mongodb
    
    # 创建数据、日志目录
    $ mkdir -p /usr/local/mongodb/data /usr/local/mongodb/logs
    
    # 创建日志文件
    $ touch /usr/local/mongodb/logs/mongodb.log
    
    # 配置环境变量
    $ vim /etc/profile
    export MONGODB_HOME=/usr/local/mongodb
    export PATH=$MONGODB_HOME/bin:$PATH
    
    $ source /etc/profile
    
  • 验证 mongodb 是否安装成功

    # 查看MongoDB版本
    $ mongod --version
    db version v7.0.12
    Build Info: {
        "version": "7.0.12",
        "gitVersion": "b6513ce0781db6818e24619e8a461eae90bc94fc",
        "openSSLVersion": "OpenSSL 1.0.1e-fips 11 Feb 2013",
        "modules": [],
        "allocator": "tcmalloc",
        "environment": {
            "distmod": "rhel70",
            "distarch": "x86_64",
            "target_arch": "x86_64"
        }
    }
    
  • 安装命令行工具 mongosh

    $ ll -h mongodb-mongosh-2.2.15.x86_64.rpm
    -rw-r--r-- 1 root root 56M 88 16:32 mongodb-mongosh-2.2.15.x86_64.rpm
    
    # 安装mongosh命令行工具, 二选一
    $ yum localinstall mongodb-mongosh-2.2.15.x86_64.rpm
    $ rpm -ivh mongodb-mongosh-2.2.15.x86_64.rpm
    
    # mongosh命令行工具语法格式
    $ mongosh IP(主机):端口 -u 用户 -p 密码
    
    # 查看mongosh是否安装成功
    $ mongosh --version
    2.2.15
    

2、服务启动方式

  • 启动方式 1: 直接使用命令,启动 MongoDB 服务

    # 1. 使用命令直接启动 (不推荐)
    # --fork表示以守护进程方式启动, 即后台启动
    $ /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs/mongod.log --fork
    
    $ /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs/mongod.log --shutdown
    
  • 创建 mongodb 的配置文件,配置文件格式两种均可

    # 方式1: 创建配置文件
    $ vim /usr/local/mongodb/mongodb.conf
    # 指定数据库路径
    dbpath=/usr/local/mongodb/data
    # 指定MongoDB日志文件
    logpath=/usr/local/mongodb/logs/mongodb.log
    # 使用追加的方式写日志
    logappend=true
    # 设置每个数据库将被保存在一个单独的目录
    directoryperdb = true
    # 端口号
    port=27017 
    # 方便外网访问
    bind_ip=0.0.0.0
    # 以守护进程的方式运行MongoDB,创建服务器进程
    fork=true 
    # 启用用户验证
    auth=true 
    # 过滤掉一些无用的日志信息
    quiet=true
    # 绑定服务IP,若绑定127.0.0.1,则只能本机访问
    bind_ip=0.0.0.0 
    
    # 方式2: 创建配置文件
    $ vim /usr/local/mongodb/mongodb.conf
    systemLog:
      destination: file
      logAppend: true
      path: "/usr/local/mongodb/logs/mongodb.log"
    
    storage:
      dbPath: "/usr/local/mongodb/data"
    
    processManagement:
      fork: true
      pidFilePath: "/usr/local/mongodb/mongod.pid"
      timeZoneInfo: "/usr/share/zoneinfo"
    
    net:
      port: 27017
      bindIp: 0.0.0.0
    
    security:
      authorization: enabled
    

    说明: 如果使用配置文件启动时,出现 Unrecognizedoption 报错,是因为 mongodb 4.0.x 版本开始中已经不再支持 storage.journal.enabled配置,journal 配置默认开启。

  • 启动方式 2: 以配置文件的方式,启动 MongoDB 服务

    # 2. 使用配置文件启动 (推荐)
    $ mongod -f /usr/local/mongodb/mongodb.conf
    
  • 停止服务 3: 通过--shutdown指令停止服务

    # 1. 常用停止服务方式
    $ mongod -f /usr/local/mongodb/mongodb.conf --shutdown
    
    # 2. 通过命令行工具关闭MongoDB数据库进程
    # mongodb7以下版本, 使用mongo命令行工具
    $ mongo --eval "db.getSiblingDB('admin').shutdownServer()"
    $ mongo admin --eval "db.shutdownServer()"
    
    # mongodb7及以上版本, 使用mongosh命令行工具
    $ mongosh --eval "db.getSiblingDB('admin').shutdownServer()"
    $ mongosh admin --eval "db.shutdownServer()"
    

3、设置开机自启

  • 编辑 MongoDB 数据库的启动脚本

    $ vim /etc/init.d/mongodb
    #!/bin/sh
    # MongoDB 启动脚本
    # Define MongoDB installation directory
    MONGODB_HOME=/usr/local/mongodb
    
    # Define MongoDB configuration file
    MONGODB_CONF=$MONGODB_HOME/mongodb.conf
    
    # Define MongoDB data directory
    MONGODB_DATA=$MONGODB_HOME/data
    
    # Define MongoDB log file
    MONGODB_LOG=$MONGODB_HOME/logs/mongodb.log
    
    # Start MongoDB
    start() {
        echo "Starting MongoDB..."
        $MONGODB_HOME/bin/mongod --config $MONGODB_CONF --dbpath $MONGODB_DATA --logpath $MONGODB_LOG --fork
    }
    
    # Stop MongoDB
    stop() {
        echo "Stopping MongoDB..."
        $MONGODB_HOME/bin/mongod --config $MONGODB_CONF --dbpath $MONGODB_DATA --logpath $MONGODB_LOG --shutdown
    }
    
    # Restart MongoDB
    restart() {
        stop
        start
    }
    
    # Check MongoDB status
    status() {
        echo "Checking MongoDB status..."
        $MONGODB_HOME/bin/mongod --config $MONGODB_CONF --dbpath $MONGODB_DATA --logpath $MONGODB_LOG --fork --quiet
        if [ $? -eq 0 ]; then
            echo "MongoDB is running."
        else
            echo "MongoDB is not running."
        fi
    }
    
    # Handle command line arguments
    case "$1" in
        start)
            start
            ;;
        stop)
            stop
            ;;
        restart)
            restart
            ;;
        status)
            status
            ;;
        *)
            echo "Usage: $0 {start|stop|restart|status}"
            exit 1
            ;;
    esac
    
    exit 0
    
  • 设置启动脚本的可执行权限

    $ chmod +x /etc/init.d/mongodb
    
  • 添加启动脚本到系统服务,并启动服务

    # 添加到系统服务
    $ chkconfig --add mongodb
    
    # 启动命令二选一
    $ systemctl start mongodb
    $ service mongodb start
    

三、管理使用 MongoDB

1、登录使用

  • mongodb 7.0.x 以下版本,进入的命令行模式,登录数据库

    # mongodb6.x.x及以下版本提供mongo命令行工具
    $ mongo
    MongoDB shell version v4.4.29
    connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
    Implicit session: session { "id" : UUID("50852a7b-6120-4387-91e9-30a2c4fef695") }
    MongoDB server version: 4.4.29
    ---
    The server generated these startup warnings when booting: 
            2024-08-05T11:11:23.187+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
            2024-08-05T11:11:23.187+08:00: You are running this process as the root user, which is not recommended
    ---
    > 
    
    # mongo命令语法格式
    # 指定主机和端口连接
    $ mongo --host <hostname>:<port>
    
    # 指定数据库连接
    $ mongo <database>
    
    # 指定用户名和密码登录
    $ mongo -u <username> -p <password> --authenticationDatabase <auth-db>
    
  • mongodb 7.0.x 以上版本,进入的命令行模式,登录数据库

    # mongodb7.0.x及以上版本不提供mongo命令行工具
    # mongodb7.0.x及以上版本需要独立安装mongosh
    $ mongosh localhost:27017				# 无用户验证
    Current Mongosh Log ID: 66b4845ef69c081eea838725
    Connecting to:          mongodb://localhost:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.2.15
    Using MongoDB:          7.0.12
    Using Mongosh:          2.2.15
    ...
    test>
    
    # 创建管理员用户和密码
    $ mongosh localhost:27017
    ...
    # 选择数据库
    test> use admin
    switched to db admin
    # 创建用户
    admin> db.createUser({
          user: "admin",
          pwd: "123456",
          roles: [{ role: "userAdminAnyDatabase", db: "admin" }]
    })
    { ok: 1 }
    # 用户鉴权
    admin> db.auth("admin","123456")
    { ok: 1 }
    ...
    
    # 使用管理员用户和密码登录
    $ mongosh localhost:27017 -u admin -p 123456	# 用户验证
    Current Mongosh Log ID: 66b485a30f732f3e31838725
    Connecting to:          mongodb://<credentials>@localhost:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.2.15
    Using MongoDB:          7.0.12
    Using Mongosh:          2.2.15
    ...
    test>
    

2、常用命令

  • mongodb 数据库常用命令

    命令作用
    show dbsshow databases
    use 数据库名切换数据库,如果不存在创建数据库
    db.dropDatabase()删除数据库
    show collectionsshow tables
    db.集合名.stats()查看集合详情
    db.集合名.drop()删除集合
    show users显示当前数据库的用户列表
    show roles显示当前数据库的角色列表
    show profile显示最近发生的操作
    load(“xxx.js”)执行一个 JavaScript 的脚步文件
    exitquit
    help查看 mongodb 支持哪些命令
    db.help()查询当前数据库支持的方法
    db.集合名.help()显示集合的帮助信息
    db.version()查看数据库版本
  • show dbs:查询所有数据库

    test> show dbs
    test				# 登录时默认的库
    admin   132.00 KiB	# 系统预留库,系统管理库,如停止数据库进程,需进到这里
    config  108.00 KiB	# 本地预留库,存储关键日志
    local   256.00 KiB	# 配置信息库,保存如分片的信息
    
  • db.createUser:创建用户语句

    db.createUser({
      user: 'admin',    // 用户名(自定义)
      pwd: '123456',    // 密码(自定义)
      roles:[{
        role: 'root',   // 选择角色属性,这里选择"超级账号"
        db: 'admin'     // 指定数据库
      }]
    })
    

四、安全优化 MongoDB

1、创建普通用户启动服务

  • root 用户运行服务,权限太大,创建普通用户,运行 mongodb 服务

    # 创建一个名为 "mongo" 的用户组,-g 777 指定组标识符(GID)为 777
    $ groupadd mongo -g 777
    
    # 创建普通用户: mongo
    $ useradd mongo -g 777
    $ useradd mongo -g 777 -M -s  /bin/false
    # -g 指定用户组为: mongo
    # -M 指定不创建用户目录
    # -s 指定登录解释器为: /bin/false, 禁止该用户登录服务器
    
    # 查看用户 "mongo" 的详细信息,包括用户标识符(UID)、组标识符(GID)等
    $ id mongo
    uid=1001(mongo) gid=777(mongo)=777(mongo)
    
  • 修改 mongodb 目录的归属和权限,切换用户启动服务

    # 修改目录权限
    $ chown -R mongo:mongo /usr/local/mongodb
    
    # 切换用户
    $ su - mongo
    
    # 启动/关闭服务
    $ mongod -f /usr/local/mongodb/mongodb.conf
    $ mongod --shutdown -f /usr/local/mongodb/mongodb.conf
    

2、编写系统管理启动文件

  • 为集中化系统管理服务,编写 service 启动文件

    $ vim /etc/systemd/system/mongodb.service
    [Unit]
    Description=MongoDB Server
    After=network.target remote-fs.target nss-lookup.target
    
    [Service]
    Type=forking
    User=mongo
    Group=mongo
    ExecStart=/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongodb.conf
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/mongodb.conf
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    
  • 重新加载配置文件,管理 mongodb 服务

    $ sudo systemctl daemon-reload
    $ sudo systemctl --user start mongodb
    $ sudo systemctl stop mongodb
    $ sudo systemctl status mongodb
    $ sudo systemctl enable mongodb
    

五、安装问题 MongoDB

1、非法指令问题

  • 问题描述: 若 MongoDB 安装成功后,启动时报错:Illegal instruction 或者非法指令 (吐核)

    $ /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs/mongod.log
    Illegal instruction
    
    $ /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs/mongod.log
    非法指令(吐核)
    
  • 原因分析: 在mongodb 5.0.x 及以上版本,mongodb 在存储性能上有所提升,而存储引擎的优化更新依赖于 avx 的支持,故 cpu 需要支持 avx 指令集,才能正常启动 5.0.x+ 版本的程序。

  • 解决办法: (1) 更换 cpu 型号 (不容易实现)、(2) 安装低版本的 mongodb

    # 1. 查看cpu支持的指令集, flags表示的是支持的指令集
    $ cat /pro/cpuinfo
    ...
    flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat ...
    
    # 2. 若cpu不支持avx指令,降低MongoDB的版本为4.x版本
    

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部