Linux - MongoDB部署

发布时间:2026/10/11 1:17:26

Linux - MongoDB部署 MongoDB部署准备部署mongoDB部署启动优化角色事务配置单节点副本集配置主机名创建内部认证密钥修改配置文件初始化副本集修改应用连接地址验证事务常见问题准备MongoDB下载官方下载选择自己需要的版本以及服务器版本以及安装方式本篇文章我们安装6.0MongoDB使用CentOS8.0使用tgz安装MongoDB Shell下载官方下载MongoDB6.0已经不自带shell了需要单独安装不在Linux中进入MongoDB可以不安装下载时注意选择平台安装类型很多这个版本不带OpenSSL有需要的自己选择将下载的两个tgz包上传至服务器中上传位置/usr/local/weekeight/mongoDB部署mongoDB部署mkdir/usr/local/mongoDB# 创建文件夹将下载的tgz上传到这里cd/usr/local/mongoDB# 进入到这个文件夹下mkdir/usr/local/mongoDB/log# 创建存放日志的目录mkdir/usr/local/mongoDB/data# 创建存放数据的目录tar-zxvfmongodb-linux-x86_64-rhel80-6.0.1.tgz# 解压tar-zxvfmongosh-1.5.4-linux-x64.tgz# 解压mvmongodb-linux-x86_64-rhel80-6.0.1 mongoDBServer# 修改一下文件名mvmongosh-1.5.4-linux-x64 mongoDBShell# 修改一下文件名cd/usr/local/mongoDB/mongoDBServer/bin# 进入文件夹准备添加配置文件vimmongodb.conf# 创建配置文件vim配置注7.0的配置格式已经变更下面的配置无法生效# 数据库路径dbpath/usr/local/mongoDB/data# 日志输出文件路径logpath/usr/local/mongoDB/log/mongodb.log# 错误日志采用追加模式logappendtrue# 启用日志文件默认启用journaltrue# 这个选项可以过滤掉一些无用的日志信息若需要调试使用请设置为falsequiettrue# 端口号 默认为27017port27017#只允许本地ip:127.0.0.1连接到该数据库服务#bind_ip127.0.0.1#允许远程访问bind_ip0.0.0.0#开启子进程作用让MongoDB服务在linux后台运行forktrue#开启认证必选先添加用户先不开启不用验证账号密码# authtruevim/etc/profile# 修改一下环境变量将下面的地址追加到文档最后mongodb_home可以不加后面我们做启动优化exportMONGODB_HOME/usr/local/mongoDB/mongoDBServerexportMONGODB_SHELL/usr/local/mongoDB/mongoDBShellexportPATH$PATH:$MONGODB_HOME/bin:$MONGODB_SHELL/binsource/etc/profile# 刷新一下环境变量启动优化vim/usr/lib/systemd/system/mongodb.service# 配置mongodb服务ln-s/usr/lib/systemd/system/mongodb.service /etc/systemd/system/mongodb.service# 创建软连接mongodb.service配置[Unit]Descriptionmongodb-serverAfternetwork.target remote-fs.target nss-lookup.target[Service]TypeforkingExecStart/usr/local/mongoDB/mongoDBServer/bin/mongod--config/usr/local/mongoDB/mongoDBServer/bin/mongodb.confExecReload/bin/kill-sHUP$MAINPIDExecStop/usr/local/mongoDB/mongoDBServer/bin/mongod--shutdown--config/usr/local/mongoDB/mongoDBServer/bin/mongodb.confPrivateTmptrueRestartalwaysRestartSec1[Install]WantedBymulti-user.targetsystemctl daemon-reload# 加载一下刚刚的配置文件systemctl start mongodb.service# 启动MongoDBsystemctl status mongodb.service# 检查是否启动成功mongosh# MongoDB Shell不用配置只用加一下环境变量即可解压就可以使用默认进入的时test库接下设置密码进入mongodb的命令行先转到admin库中use admin设置账户密码然后就是角色db.createUser({user:root,pwd:Kr8PbuNeY,roles:[{role:root,db:admin}]})退出来quit角色数据库用户角色read:只读数据权限readWrite:读写数据权限 数据库管理角色dbAdmin:在当前db中执行管理操作的权限dbOwner:在当前db中执行任意操作userADmin:在当前db中管理user的权限 备份和还原角色backup:备份restore:还原 夸库角色readAnyDatabase:在所有数据库上都有读取数据的权限readWriteAnyDatabase:在所有数据库上都有读写数据的权限userAdminAnyDatabase:在所有数据库上都有管理user的权限dbAdminAnyDatabase:管理所有数据库的权限 集群管理clusterAdmin:管理机器的最高权限clusterManager:管理和监控集群的权限clusterMonitor:监控集群的权限hostManager:管理Server 超级权限root:超级用户Linux命令行systemctl stop mongodb.servic# 关闭MongoDBvim/usr/local/mongoDB/mongoDBServer/bin/mongodb.conf# 进入到配置文件中将authtrue的注释解开systemctl start mongodb.service# 启动MongoDBmongosh admin-uroot-pKr8PbuNeY# 再进入到MongoDB的时候就要加上了不然的话可以进去但是命令都不能用然后就是开放端口了27017将端口开放如果是云服务的话记得再控制台打开使用MongoDB Compass在其他地方远程连接端口默认的不用写不是默认的在IP后面拼上**:端口**然后连接即可事务配置单节点副本集MongoDB 普通单机模式支持单文档原子操作但不支持多文档事务。如果业务需要同时修改多条文档或多个集合并保证一起成功、一起回滚需要使用副本集或分片集群。官方事务说明只有一台服务器也可以配置成单节点副本集不需要再购买服务器。本节用于开发、测试环境单节点虽然支持事务但没有多节点的故障接管能力。前提已经按照前文创建 root 管理员并开启认证。以下命令沿用前文 root 用户运行 MongoDB 的方式。配置主机名副本集会向客户端返回成员地址因此服务器和客户端都需要能解析并访问这个地址。本例使用mongo.test作为主机名通过 hosts 配置解析无需购买域名。假设 MongoDB 安装在云服务器本机使用 Windows 远程连接Linux 将主机名解析到服务器内网 IPWindows 将同一个主机名解析到服务器公网 IP。Linux 配置vim/etc/hosts在末尾添加替换成实际内网 IP不要保留尖括号云服务器内网IP mongo.test检查getent hosts mongo.testWindows 配置以管理员身份运行记事本打开以下文件打开时文件类型选择“所有文件”C:\Windows\System32\drivers\etc\hosts在末尾添加云服务器公网IP mongo.test在 PowerShell 中检查连接Test-NetConnectionmongo.test-Port 27017TcpTestSucceeded : True表示端口可达。如果失败检查 hosts、防火墙和云服务器安全组27017 端口只允许需要连接的客户端来源访问。其他应用服务器也需要配置对应解析或统一使用内部 DNS。不要把副本集成员地址填写成localhost否则远程客户端会尝试连接自己的电脑。创建内部认证密钥开启账号认证的副本集还需要配置成员之间的内部认证。本例使用 keyFile它和 root 用户密码是两回事不需要填写到应用连接串中。官方说明Linux 执行(set-eumask077# 文件已存在时不覆盖if[!-e/usr/local/mongoDB/mongoDBServer/bin/mongodb.key];thenopenssl rand-base64756/usr/local/mongoDB/mongoDBServer/bin/mongodb.keyfi# 仅文件所有者可读chmod400/usr/local/mongoDB/mongoDBServer/bin/mongodb.key)查看权限ls-l/usr/local/mongoDB/mongoDBServer/bin/mongodb.key本文使用 root 运行 MongoDB文件所有者应为 root权限为-r--------。如果使用其他系统用户运行 MongoDB需要把文件所有者调整为对应用户并保证其可以访问父目录。不要公开或上传 keyFile 内容。修改配置文件先备份原配置cp-p/usr/local/mongoDB/mongoDBServer/bin/mongodb.conf\/usr/local/mongoDB/mongoDBServer/bin/mongodb.conf.bak.$(date%Y%m%d-%H%M%S)停止服务systemctl stop mongodb.service systemctl is-active mongodb.service确认服务已经停止。首次安装可直接继续已有业务数据时应在停机后完成数据备份再修改配置。不要直接复制正在运行的数据库数据目录作为备份。编辑vim/usr/local/mongoDB/mongoDBServer/bin/mongodb.conf将原来的keyvalue配置整体替换为下面的 YAML 格式不要混用两种格式。此处数据和日志路径沿用前文已有安装应保留自己的实际路径。storage:dbPath:/usr/local/mongoDB/datasystemLog:destination:filepath:/usr/local/mongoDB/log/mongodb.loglogAppend:trueprocessManagement:fork:truenet:port:27017bindIp:0.0.0.0security:authorization:enabledkeyFile:/usr/local/mongoDB/mongoDBServer/bin/mongodb.keyreplication:replSetName:rs0rs0是自定义的副本集名称不是数据库名称后续初始化及连接串中的名称必须一致。YAML 使用空格缩进不要使用 Tab。现有数据、数据库用户不会因为增加这两个配置项而被重新创建。启动服务systemctl start mongodb.service systemctl status mongodb.service --no-pager-l启动失败时查看日志tail-n60/usr/local/mongoDB/log/mongodb.log此时服务虽然启动但副本集还没有初始化需要完成下一步才能恢复正常业务读写。初始化副本集在 Linux 使用 root 数据库账号连接按提示输入密码mongosh-uroot-p这里使用直连访问本机便于初始化。admin是前文创建 root 用户的认证库。密码通过提示输入不直接写进命令。进入 MongoDB Shell 后执行rs.initiate({_id:rs0,members:[{_id:0,host:mongo.test:27017}]})返回{ok:1}初始化只需要执行一次后续重启不需要重复执行。当前命令行显示test也没关系副本集配置针对整个 MongoDB 实例不需要切换到业务数据库。等待几秒检查db.adminCommand({hello:1})确认同时存在setName:rs0isWritablePrimary:true也可以查看rs.status()当前成员的stateStr应为PRIMARY表示单节点副本集已就绪。修改应用连接地址应用连接串示例mongodb://用户名:编码后的密码mongo.test:27017/业务库?authSource用户所属认证库replicaSetrs0authSource是创建用户时所在的数据库不一定等于业务库。例如前文 root 用户创建在admin其认证库就是admin。如果密码包含特殊字符需要对连接串中的用户名、密码部分进行 URL 编码不是修改数据库原密码也不要把整个 URI 一起编码。应用使用独立业务账号按需授予权限不直接使用 root 管理员账号。例如密码中的 → %26 ^ → %5E → %40保存配置并重启应用。正常连接时使用replicaSetrs0不必沿用初始化阶段的directConnectiontrue。验证事务PRIMARY 状态说明副本集已就绪下面通过一次实际写入并回滚检查事务是否可用。使用 root 在 MongoDB Shell 中执行测试会创建一个专用测试集合。// 在事务外准备测试集合constcheckDbdb.getSiblingDB(mongodb_transaction_check)checkDb.runCommand({create:probe,writeConcern:{w:majority}})继续执行constsessiondb.getMongo().startSession()constprobeIdnewObjectId()try{constcollectionsession.getDatabase(mongodb_transaction_check).getCollection(probe)session.startTransaction()collection.insertOne({_id:probeId,description:事务回滚验证})session.abortTransaction()print(回滚后记录数应为 0,checkDb.probe.countDocuments({_id:probeId}))}finally{session.endSession()}没有事务相关报错且记录数为0表示本次事务写入及回滚成功。实际业务仍需要验证自己的提交、回滚和异常处理流程。常见问题问题检查方向No replica set members available是否已初始化副本集名称是否一致客户端是否能解析成员主机名Authentication failed用户名、密码、authSource和 URI 特殊字符编码提示事务只能运行在副本集成员或 mongos 上是否仍连接普通单机实例或应用没有加载新配置增加副本集配置后启动失败keyFile 路径、所有者、权限及 YAML 缩进具体查看日志already initialized已初始化过使用rs.status()检查不重复初始化Linux 可以连接Windows 连接超时Windows hosts、安全组、防火墙以及成员地址端口可达性本专栏为微服务记录专栏如有问题还望指出共同学习
延伸阅读

更多相关文章

2026/10/11 1:17:26

产品测试与试验汇总

目录: 一、固体/非固体铝电解电容测试 1、测试电压 2、测试次数 3、高低温测试及其方法 二、电磁继电器的测试 1、推荐的阻性负载值 2、推荐的工作频率 3、推荐的占空比值 三、微机综保耐压与老化测试 1、耐压测试

2026/10/11 1:17:26

对话盖国强丨从厂商视角看国产数据库发展技术路线与前景

近日,云和恩墨创始人兼总经理盖国强先生受国君计算机首席分析师李沐华博士之邀,在线上展开对话,就国产数据库发展技术路线与前景进行了观点阐述,并回答了听众的提问。以下是对话实录(根据录音整理)。核心要…

2026/10/11 1:17:26

VSCode终端配置conda powershell

1、ctrl shift p打开palete管理面板2、搜索setting,找到setting.json,后打开3、按照以下格式添加如下配置代码,其中args参数列表可以参考Anaconda Powershell Prompt快捷键属性中目标里的内容注:若是在VSCode中配置cmd&#xff…

2026/10/11 4:42:41

机器学习入门指南:核心算法、复杂度与落地场景全解析

如果你点进这篇文章,大概率和我当年一样,被“机器学习”这四个字吓住过。我做了好几年机器学习相关的工作,带过不少零基础的朋友(甚至真有一位“太奶”级别的长辈问我:这玩意儿是不是跟算命差不多)&#xf…

2026/10/11 4:42:41

三个开源考试系统 GitHub 项目介绍与部署指南

1. 引言 在高校教学、企业培训与在线教育场景中,考试系统是必不可少的基础设施。一个成熟的开源考试系统,不仅能帮助教师快速组卷、阅卷与统计成绩,也能为学生提供便捷的在线答题体验。本文整理了三个来自 GitHub 的开源考试系统项目&#xf…

2026/10/11 4:42:41

PS5手柄跨平台驱动与协议适配技术解析

我无法基于当前输入生成符合要求的博文。原因如下:项目标题"AnyPS5"缺乏明确指向性:它既非通用技术术语,也非已知开源项目、SDK、协议或行业标准名称;在主流技术社区、学术文献及公开资料中无权威定义。经核查&#xff…

2026/10/11 4:42:41

实战拆解VR应急救护学习机:硬件、评分与部署要点

急救培训这件事,我一直觉得它有个很尴尬的处境:所有人都知道重要,但真正练得好的没几个。尤其是心肺复苏,很多学员在模拟人上按得有模有样,真到了现场一紧张,按压位置偏了、频率乱了、连呼救都忘了。这几年…

2026/10/11 0:02:13

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/11 0:02:13

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/11 0:02:13

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/11 0:02:13

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/11 0:02:13

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/11 0:02:13

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑