Linux安装部署数据库:MongoDB

news2024/10/27 15:33:54

Linux安装部署数据库:MongoDB

    • 一、虚拟机环境说明
      • 1、安装前准备
      • 2、数据库软件
      • 3、数据库工具
    • 二、源码安装 MongoDB
      • 1、安装配置环境
      • 2、服务启动方式
      • 3、设置开机自启
    • 三、管理使用 MongoDB
      • 1、登录使用
      • 2、常用命令
    • 四、安全优化 MongoDB
      • 1、创建普通用户启动服务
      • 2、编写系统管理启动文件
    • 五、安装问题 MongoDB
      • 1、非法指令问题


写在前面:

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

一、虚拟机环境说明

1、安装前准备

  • 安装环境:

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

2、数据库软件

  • 下载地址:

    • 下载地址:Download MongoDB Community Server

    • 历史版本:Download MongoDB Release Community Server

  • 选择对应版本和操作系统类型和版本下载安装包

3、数据库工具

  • 命令行工具:mongosh

    • 下载地址:MongoDB Shell Download
    • 下载版本mongodb-mongosh-2.2.15.x86_64.rpm

    注意: 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版本
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2224762.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习 - 树结构1 - 随机森林

算法原理 随机森林由多个决策树构成&#xff0c;每棵树在训练时使用随机选择的样本和特征子集。在分类任务中&#xff0c;每棵树对新的输入样本进行分类&#xff0c;最终的分类结果由多数树的分类结果决定。这种方法可以提高预测的准确性&#xff0c;并且通过平均或投票机制减少…

【C++】动态库动态加载实例详解

动态库动态加载&#xff1a;LoadLibrary与函数地址获取详解 一、概述三、加载失败的原因及解决方案DLL文件不存在或路径不正确&#xff1a;依赖的其他DLL未找到&#xff1a;权限问题&#xff1a;DLL版本不兼容&#xff1a; 四、总结 在软件开发中&#xff0c;模块化设计是一种非…

基于Spring Boot的学生宿舍信息资源整合

3系统分析 3.1可行性分析 通过对本学生宿舍信息管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本学生宿舍信息管理系统采用Spring Boot框架&#xff0…

【C++笔记】内存管理

前言 各位读者朋友们大家好&#xff0c;上期我们讲了类和对象下的内容&#xff0c;类和对象整体的内容我们就讲完了&#xff0c;接下来我们开启新的部分内存管理的讲解。 目录 前言一. C/C内存分布二. C语言中内存管理的方式三. C内存管理方式3.1 new/delete操作内置类型3.2…

时间序列预测(九)——门控循环单元网络(GRU)

目录 一、GRU结构 二、GRU核心思想 1、更新门&#xff08;Update Gate&#xff09;&#xff1a;决定了当前时刻隐藏状态中旧状态和新候选状态的混合比例。 2、重置门&#xff08;Reset Gate&#xff09;&#xff1a;用于控制前一时刻隐藏状态对当前候选隐藏状态的影响程度。…

idea 无法输入中文 快速解决

idea在某些情况会出现无法输入中文的情况&#xff0c;我们不去深究内部原因&#xff0c;直接上解决方案&#xff1a; 1、点击菜单help->Edit Custom VM Options 2、最后一行&#xff0c;追加&#xff1a; -Drecreate.x11.input.methodtrue 、 3、重启

计算机毕业设计Java连锁超市销售与分析系统 销售数据管理 超市运营分析 数据可视化 (源码+定制+开发)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

10月27日

取P为A 秩1矩阵只有1个特征值为正&#xff0c;其余为1

YOLO11 目标检测 | 自动标注 | 预标注 | 标签格式转换 | 手动校正标签

本文分享使用YOLO11进行目标检测时&#xff0c;实现模型推理预标注、自动标注、标签格式转换、以及使用Labelme手动校正标签等功能。 目录 1、预训练权重 2、生成预标注 3、分析YOLO11的目标检测格式 4、分析Labelme标注工具的格式 5、生成json标注文件 6、手动校正标签 …

#渗透测试#SRC漏洞挖掘# 信息收集-Shodan进阶VNC

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

PHPOK 4.8.338 后台任意文件上传漏洞(CVE-2018-12941)复现

PHPOK企业站(简称PHPOK&#xff09;建设系统是一套基于PHP和MySQL构建的高效企业网站建设方案之一&#xff0c;全面针对企业网&#xff08;以展示为中心&#xff09;进行合理的设计规划。 PHPOK是一套开源免费的建站系统&#xff0c;可以在遵守LGPL协议的基础上免费使用。系统具…

trueNas 24.10 docker配置文件daemon.json无法修改(重启被覆盖)解决方案

前言 最近听说truenas的24.10版本开放docker容器解决方案放弃了原来难用的k3s&#xff0c;感觉非常巴适&#xff0c;就研究了一下&#xff0c;首先遇到无法迁移老系统应用问题比较好解决&#xff0c;使用sudo登录ssh临时修改daemon.json重启docker后进行docker start 容器即可…

腾讯云视频文件上传云存储时自动将mp4格式转码成m3u8

针对问题&#xff1a; 弱网环境下或手机网络播放mp4格式视频卡顿。 存储环境&#xff1a;腾讯云对象存储。 处理流程&#xff1a; 1&#xff1a;登录腾讯云控制台&#xff0c;进入对象存储服务&#xff0c;找到对应的存储桶&#xff0c;点击进入。 在任务与工作流选项卡中找…

Linux复习-C++

参考博客&#xff1a; https://blog.csdn.net/qq_45254369/article/details/126023482?ops_request_misc%257B%2522request%255Fid%2522%253A%252277629891-A0F3-4EFC-B1AC-410093596085%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&req…

深入探索:AI模型在各行业的实际应用

深入探索&#xff1a;AI模型在各行业的实际应用 前言一、卷积神经网络&#xff08;CNN&#xff09;图像分类 二、循环神经网络&#xff08;RNN&#xff09;及其变体&#xff08;LSTM、GRU&#xff09;自然语言处理&#xff08;NLP&#xff09; 三、基于Transformer架构的模型&a…

基于树型结构实现顺序结构堆

目录 前言 一、树 1、树的概念与结构 2、树的相关术语 3、二叉树 4、满二叉树 ​ 5、完全二叉树 ​ 6、二叉树的存储 1、顺序结构 2、链式结构 二、堆 1、堆的结构 2、堆的初始化 3、入堆&#xff08;大根堆&#xff09; 4、出堆&#xff08;大根堆&#xf…

C++网络编程之C/S模型

C网络编程之C/S模型 引言 在网络编程中&#xff0c;C/S&#xff08;Client/Server&#xff0c;客户端/服务器&#xff09;模型是一种最基本且广泛应用的架构模式。这种模型将应用程序分为两个部分&#xff1a;服务器&#xff08;Server&#xff09;和客户端&#xff08;Clien…

Java审计对比工具JaVers使用

最近有个需求&#xff0c;需要将页面的内容生成excel或者word文档&#xff0c;而且每次的修改都需要生成新的版本&#xff0c;同时需要记录每次修改变化的内容。我们会把每次的修改的内容提交赋值给一个java对象&#xff0c;同时存储到数据库一条新数据&#xff0c;对应数据表一…

uniapp圆形波浪进度效果

uniapp圆形波浪进度效果 背景实现思路代码实现尾巴 背景 最近项目中有些统计的地方需要用到圆形的波浪进度效果&#xff0c;要求是根据百分比值然后在一个圆形内动态的展示一个波浪形的进度&#xff0c;看参考一下效果。 实现思路 这个效果看着挺复杂的&#xff0c;那么我们…

android——渐变色

1、xml的方式实现渐变色 效果图&#xff1a; xml的代码&#xff1a; <?xml version"1.0" encoding"utf-8"?> <shape xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools…