Linux安装部署数据库:MongoDB
写在前面:
- 本文在部分内容方面,参考了CSDN部分博主的文章内容,如有冒犯请联系博主协商处理。
- 本文所有安装和配置的内容都经博主实测有效,如有错误的地方,欢迎大家指正学习。
- 文章创作不易,请各位看官给个三连,博主在此先行感谢了!!!
一、虚拟机环境说明
1、安装前准备
-
安装环境:
虚拟机版本 版本说明 安装包 CentOS 7.x MongoDB-7.0.12 mongodb-linux-x86_64-rhel70-7.0.12.tgz -
数据库手册: What is MongoDB?
2、数据库软件
-
下载地址:
-
选择对应版本和操作系统类型和版本下载安装包
3、数据库工具
-
命令行工具:mongosh
下载地址
:MongoDB Shell Download下载版本
:mongodb-mongosh-2.2.15.x86_64.rpm
注意: mongodb7.0.x 版本开始不主动提供命令行工具 mongo,需要自行安装 mongosh
二、源码安装 MongoDB
1、安装配置环境
-
上传安装包至服务器,安装依赖包,解压安装包
shell$ ll -h mongodb-linux-x86_64-rhel70-7.0.12.tgz -rw-r--r-- 1 root root 81M 8月 5 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 是否安装成功
shell# 查看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
shell$ ll -h mongodb-mongosh-2.2.15.x86_64.rpm -rw-r--r-- 1 root root 56M 8月 8 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 服务
shell# 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 的配置文件,配置文件格式两种均可
shell# 方式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 服务
shell# 2. 使用配置文件启动 (推荐) $ mongod -f /usr/local/mongodb/mongodb.conf
-
停止服务 3: 通过
--shutdown
指令停止服务shell# 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 数据库的启动脚本
shell$ 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
-
设置启动脚本的可执行权限
shell$ chmod +x /etc/init.d/mongodb
-
添加启动脚本到系统服务,并启动服务
shell# 添加到系统服务 $ chkconfig --add mongodb # 启动命令二选一 $ systemctl start mongodb $ service mongodb start
三、管理使用 MongoDB
1、登录使用
-
mongodb 7.0.x 以下版本,进入的命令行模式,登录数据库
shell# 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 以上版本,进入的命令行模式,登录数据库
shell# 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 dbs show databases use 数据库名 切换数据库,如果不存在创建数据库 db.dropDatabase() 删除数据库 show collections show tables db.集合名.stats() 查看集合详情 db.集合名.drop() 删除集合 show users 显示当前数据库的用户列表 show roles 显示当前数据库的角色列表 show profile 显示最近发生的操作 load("xxx.js") 执行一个 JavaScript 的脚步文件 exit quit help 查看 mongodb 支持哪些命令 db.help() 查询当前数据库支持的方法 db.集合名.help() 显示集合的帮助信息 db.version() 查看数据库版本 -
show dbs
:查询所有数据库shelltest> show dbs test # 登录时默认的库 admin 132.00 KiB # 系统预留库,系统管理库,如停止数据库进程,需进到这里 config 108.00 KiB # 本地预留库,存储关键日志 local 256.00 KiB # 配置信息库,保存如分片的信息
-
db.createUser
:创建用户语句shelldb.createUser({ user: 'admin', // 用户名(自定义) pwd: '123456', // 密码(自定义) roles:[{ role: 'root', // 选择角色属性,这里选择"超级账号" db: 'admin' // 指定数据库 }] })
四、安全优化 MongoDB
1、创建普通用户启动服务
-
root 用户运行服务,权限太大,创建普通用户,运行 mongodb 服务
shell# 创建一个名为 "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 目录的归属和权限,切换用户启动服务
shell# 修改目录权限 $ 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 启动文件
shell$ 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 服务
shell$ 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 或者非法指令 (吐核)
shell$ /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
shell# 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版本