Linux安装部署数据库:MongoDB

news/2024/10/30 20:27:52/

Linux安装部署数据库:MongoDB

    • 一、虚拟机环境说明
    • 二、源码安装 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: filelogAppend: truepath: "/usr/local/mongodb/logs/mongodb.log"storage:dbPath: "/usr/local/mongodb/data"processManagement:fork: truepidFilePath: "/usr/local/mongodb/mongod.pid"timeZoneInfo: "/usr/share/zoneinfo"net:port: 27017bindIp: 0.0.0.0security: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() {stopstart
    }# Check MongoDB status
    status() {echo "Checking MongoDB status..."$MONGODB_HOME/bin/mongod --config $MONGODB_CONF --dbpath $MONGODB_DATA --logpath $MONGODB_LOG --fork --quietif [ $? -eq 0 ]; thenecho "MongoDB is running."elseecho "MongoDB is not running."fi
    }# Handle command line arguments
    case "$1" instart)start;;stop)stop;;restart)restart;;status)status;;*)echo "Usage: $0 {start|stop|restart|status}"exit 1;;
    esacexit 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 unrestricted2024-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.ppmy.cn/news/1543178.html

相关文章

理解typeScript中的泛型,并在vue3项目中使用

泛型&#xff08;Generics&#xff09;是 TypeScript 中一个非常强大的特性&#xff0c;它允许你在编写代码时定义类型参数&#xff0c;并在使用时指定具体的类型。这使得你的代码更加灵活和可复用&#xff0c;同时也能够保持类型的安全性。 泛型的基本概念 在 TypeScript 中…

Docker 部署 Java 项目实践

在当今的软件开发领域&#xff0c;容器化技术已经成为了一种趋势。Docker 作为一种流行的容器化平台&#xff0c;为开发者提供了一种便捷、高效的方式来部署和管理应用程序。对于 Java 项目而言&#xff0c;使用 Docker 进行部署可以带来许多好处&#xff0c;如提高部署效率、增…

vue打包的dist文件,再使用eletron打包为exe

1.下载eletron demo demo 2.npm install 2.1如遇443&#xff0c;使用eletron镜像专用源&#xff0c;参考链接 [eletron]RequestError: connect ETIMEDOUT 20.205.243.166:443&#xff0c;为eletron设置专用源。 3.在electron-quick-start-main下粘贴dist 4.再粘贴static/lo…

基于Django+Python的房屋信息可视化及价格预测系统设计与实现(带文档)

项目运行 需要先安装Python的相关依赖&#xff1a;pymysql&#xff0c;Django3.2.8&#xff0c;pillow 使用pip install 安装 第一步&#xff1a;创建数据库 第二步&#xff1a;执行SQL语句&#xff0c;.sql文件&#xff0c;运行该文件中的SQL语句 第三步&#xff1a;修改源…

BGP路径属性与路由反射器

前言 IBGP水平分割规则用于防止AS内部产生环路&#xff0c;在很大程度上杜绝了IBGP路由产生环路的可能性&#xff0c;但是同时也带来了新的问题&#xff1a;BGP路由在AS内部只能传递一跳&#xff0c;如果建立IBGP对等体全互联模型又会加重设备的负担。 BGP 路径属性 AS_Path …

为什么不建议使用黑帽SEO手法?

黑帽SEO&#xff0c;是指采用一些违反谷歌搜索引擎规则的手段&#xff0c;短期内提升排名的做法。很多不法SEO服务商&#xff0c;会通过隐藏文字、伪造内容、堆砌关键词、群发垃圾外链等方式&#xff0c;让网站在短时间内获得大量流量和排名。 虽然这种方式看似有效&#xff0c…

一些小细节代码笔记汇总

Python cv2抓取摄像头图片保存到本地 import cv2 import datetime, ossavePath "E:/Image/"if not os.path.exists(savePath):os.makedirs(savePath)cap cv2.VideoCapture(0) capture Falseif not cap.isOpened():print("无法打开摄像头")exit()while…

oracle获取中文拼音/WB

1.oracle获取中文拼音首字母 CREATE OR REPLACE FUNCTION FUNC_GET_PY(z varchar2) RETURN varchar2 ISpy varchar2(20); --与源字符对应的拼音码curr_no integer; --当前字符序号maxlen integer; --z(源字符串)的最大长度l_schar varchar2(100); --截取后的源字符…