在Mac上搭建MongoDB环境

最近工作中需要装MongoDB环境,搭建过程中遇到了一些问题,在这里记录一下安装MongoDB环境的方法以及问题的解决方法。有两种安装MongoDB的方法:brew安装和手动安装。

目录

使用Homebrew安装MongoDB

手动安装MongoDB(不使用Homebrew)

两种安装方式对应的卸载方法

执行mongo命令提示command not found


使用Homebrew安装MongoDB

  1. 安装Homebrew(如果你还没有安装): 打开终端(Terminal)并运行以下命令来安装Homebrew:

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

    安装完成后,运行以下命令以确保Homebrew安装正确:

    brew doctor
  2. 通过Homebrew安装MongoDB: MongoDB官方已经不支持通过Homebrew直接安装,但你可以使用第三方tap来安装。在终端运行以下命令:

    brew tap mongodb/brew brew install mongodb-community
  3. 启动MongoDB服务: 你可以使用brew服务来启动MongoDB:

    brew services start mongodb/brew/mongodb-community

    这将配置MongoDB作为后台服务启动。执行这条命令遇到了报错:

    Error: uninitialized constant Homebrew::Service::System
    /usr/local/Homebrew/Library/Homebrew/macos_version.rb:150:in `const_missing'
    /usr/local/Homebrew/Library/Taps/homebrew/homebrew-services/cmd/services.rb:61:in `services'
    /usr/local/Homebrew/Library/Homebrew/brew.rb:94:in `<main>'

    这个错误信息表明在尝试使用Homebrew的services命令时遇到了问题。Homebrew::Service::System是一个未初始化的常量,这通常意味着Homebrew的某部分没有正确加载或者Homebrew本身可能存在损坏。

    为了解决这个问题,可以尝试以下几个步骤:(1)更新Homebrew: 运行以下命令以确保Homebrew和所有的tap都是最新的:

    brew update 
    brew upgrade

    (2)检查Homebrew的健康状况: 运行以下命令来检查Homebrew的状态,并修复任何报告的问题:

    brew doctor 

    (3)重新启动你的计算机: 有时候,简单地重新启动计算机可以解决临时的系统问题。              以上三步都没有解决我的问题。       (4)重新安装Homebrew服务: 如果更新和修复之后问题仍然存在,尝试卸载Homebrew服务然后重新安装:

    brew untap homebrew/services 
    brew tap homebrew/services

    这一步解决了我的问题。(5)检查Homebrew的版本: 确保你的Homebrew版本是最新的。运行以下命令查看当前版本:

    brew --version

    如果不是最新的,再次运行brew update。(6)重新安装Homebrew: 如果以上步骤都不能解决问题,你可能需要重新安装Homebrew。首先,备份你当前的Homebrew安装(包括已安装的包),然后根据Homebrew的文档进行重新安装。如果在尝试这些步骤之后问题依然存在,你可能需要查看Homebrew的GitHub仓库中的Issues页面看看是否有其他人遇到了类似的问题,或者创建一个新的Issue求助。                                     启动mongodb服务成功:

  4. 验证MongoDB是否正在运行: 在终端运行以下命令来连接MongoDB服务器:

    mongo

    如果MongoDB已经启动,你将看到MongoDB shell的提示符。这一步我又遇到了问题:

    qa@QAdeMacBook-Pro ~ % mongo
    zsh: command not found: mongo

    这意味着 mongo shell 并不在你的系统 PATH 环境变量中。这通常发生在以下几种情况:(1)MongoDB shell没有安装:在某些情况下,MongoDB服务器和MongoDB shell是分开安装的。确保你已经安装了包含mongo shell的MongoDB包。(2)PATH环境变量未正确设置:当你安装MongoDB时,mongo shell的可执行文件应该位于MongoDB的bin目录中。你需要确保这个目录被添加到了你的PATH环境变量中。解决这个问题的步骤如下:(1)确认mongo shell是否安装: 你可以通过brew list命令检查是否安装了mongo shell:

    brew list | grep mongo

    如果这个命令返回了与mongodb-community相关的结果,那么mongo shell应该已经安装了。(2)添加MongoDB的bin目录到PATH: 找到MongoDB的安装目录,并将其bin目录添加到你的PATH环境变量中。通常,如果你是通过Homebrew安装的MongoDB,它的bin目录可能位于/usr/local/opt/mongodb-community/bin。你可以通过以下命令将其添加到你的.zshrc文件中:

    echo 'export PATH="/usr/local/opt/mongodb-community/bin:$PATH"' >> ~/.zshrc

    然后,运行source ~/.zshrc来重新加载你的配置,或者重新打开一个终端窗口。(3)验证PATH环境变量: 使用echo $PATH命令来确认PATH环境变量是否包含了MongoDB的bin目录。(4)再次尝试运行mongo shell: 在终端中输入mongo并回车,看看是否能够启动MongoDB shell。如果你按照上述步骤操作后仍然无法运行mongo命令,可能需要重新安装MongoDB shell或者进一步检查你的系统配置。我按照要求设置了环境变量,还是会有这个报错。如果要停止使用brew services启动的MongoDB服务,你可以执行以下命令:

    brew services stop mongodb

    如果你的MongoDB是通过mongodb-community包安装的,你可能需要执行:

    brew services stop mongodb-community

    如果你想查看所有通过brew services管理的服务的状态,可以使用:

    brew services list

    这将列出所有服务及其当前状态(如已启动、已停止等)。这样,你就可以轻松管理你的MongoDB服务以及任何其他使用Homebrew安装的后台服务。

手动安装MongoDB(不使用Homebrew)

  1. 下载MongoDB: 访问MongoDB官方网站下载页(https://www.mongodb.com/try/download/community),选择适合的版本下载。

  2. 解压MongoDB压缩包: 下载完成后,解压MongoDB压缩包到一个你选择的目录。

  3. 配置环境变量: 将MongoDB目录的bin文件夹添加到你的PATH环境变量中。你可以在~/.bash_profile~/.zshrc或你的shell配置文件中添加以下行:

    export PATH=<MongoDB安装目录>/bin:$PATH

    替换<MongoDB安装目录>为你的实际安装路径。/Users/qa/Downloads/mongodb-macos-x86_64-7.0.4/bin,export PATH="/Users/qa/Downloads/mongodb-macos-x86_64-7.0.4/bin:$PATH"

  4. 创建数据和日志目录: 默认情况下,MongoDB将数据存储在/data/db目录中,但你需要手动创建这个目录:

    sudo mkdir -p /data/db 
    sudo chown `id -un` /data/db

    你也可以选择其他目录来存储数据,但需要在启动MongoDB时指定。执行sudo mkdir -p /data/db 报错mkdir: /data: Read-only file system。

    在macOS上,特别是从Catalina (10.15) 版本开始,系统引入了只读的系统卷,这意味着你不能直接在根目录(/)下创建或修改文件夹,因此你会遇到 "Read-only file system" 的错误。

    为了解决这个问题,你可以在用户的主目录或其他非系统保护区域创建数据目录。例如,你可以在你的主目录下创建一个db目录:(1)打开终端。(2)运行以下命令来创建一个名为mongodb-data的目录(你可以根据自己的需要命名这个目录):

    mkdir -p ~/mongodb-data

    (3)然后你需要告诉MongoDB使用这个新的数据目录。当你启动mongod服务时,使用--dbpath选项指定数据目录的路径:

    mongod --dbpath ~/mongodb-data

    这样,MongoDB就会使用你在主目录下创建的mongodb-data文件夹来存储数据,而不是默认的/data/db目录。

    请注意,如果你是通过Homebrew安装的MongoDB,并且希望使用brew services来管理MongoDB服务,你可能需要修改Homebrew服务的配置文件来指定新的数据目录路径。这通常涉及到编辑MongoDB的plist文件(位于/usr/local/Cellar/mongodb-community/{version}/homebrew.mxcl.mongodb-community.plist,其中{version}需要替换为实际安装的版本号),并在其中添加--dbpath选项。

  5. 启动MongoDB: 在终端运行以下命令来启动MongoDB:

    mongod

    如果你更改了数据存储目录,使用--dbpath选项指定路径:

    mongod --dbpath <你的数据目录路径>
  6. 连接MongoDB: 打开另一个终端窗口,运行以下命令连接MongoDB:

    mongo

当我启动mongodb服务时,遇到了错误:

{"t":{"$date":"2023-12-29T15:46:46.054+08:00"},"s":"E",  "c":"CONTROL",  "id":20568,   "ctx":"initandlisten","msg":"Error setting up listener","attr":{"error":{"code":9001,"codeName":"SocketException","errmsg":"setup bind :: caused by :: Address already in use"}}}
{"t":{"$date":"2023-12-29T15:46:46.054+08:00"},"s":"I",  "c":"REPL",     "id":4784900, "ctx":"initandlisten","msg":"Stepping down the ReplicationCoordinator for shutdown","attr":{"waitTimeMillis":15000}}
{"t":{"$date":"2023-12-29T15:46:46.054+08:00"},"s":"I",  "c":"REPL",     "id":4794602, "ctx":"initandlisten","msg":"Attempting to enter quiesce mode"}
{"t":{"$date":"2023-12-29T15:46:46.054+08:00"},"s":"I",  "c":"-",        "id":6371601, "ctx":"initandlisten","msg":"Shutting down the FLE Crud thread pool"}
{"t":{"$date":"2023-12-29T15:46:46.054+08:00"},"s":"I",  "c":"COMMAND",  "id":4784901, "ctx":"initandlisten","msg":"Shutting down the MirrorMaestro"}

Error setting up listener

这表明MongoDB服务在尝试绑定到某个网络地址(如localhost)和端口(默认是27017)时遇到了问题。错误的具体内容是:

Address already in use

这意味着MongoDB服务尝试绑定的端口已经被其他进程占用了。在大多数情况下,这是因为另一个MongoDB实例已经在运行,或者有其他服务正在使用该端口。

要解决这个问题,你可以采取以下步骤:

  1. 查找占用端口的进程:你可以使用lsofnetstat命令来查找哪个进程正在使用27017端口。例如:

    lsof -i :27017

    或者

    netstat -anp | grep 27017

    这将列出所有使用27017端口的进程信息。

  2. 结束占用端口的进程:如果确定是MongoDB的另一个实例占用了端口,并且你确定要关闭它,你可以使用kill命令来结束该进程。例如:

    kill <PID>

    其中<PID>是占用端口的进程ID。

  3. 重新启动MongoDB服务:在结束占用端口的进程之后,你可以尝试再次启动MongoDB服务:

    mongod --dbpath ~/mongodb-data

以上就是在Mac上搭建MongoDB环境的基本步骤。如果有任何问题,可以参考MongoDB的官方文档或者在安装过程中查看终端中的错误信息。

两种安装方式对应的卸载方法

如果你在电脑上既使用Homebrew安装了MongoDB,又手动安装了MongoDB,并为它们配置了不同的环境变量,可能会遇到以下问题:

  1. 端口冲突:MongoDB默认使用27017端口。如果两个MongoDB实例都尝试使用同一个端口,那么后启动的实例将无法绑定到该端口上,因为它已经被第一个实例占用了。

  2. 配置混淆:如果你为两个MongoDB实例设置了不同的环境变量,可能会导致运行时的配置混淆。例如,当你尝试启动或与MongoDB交互时,你可能不确定正在使用哪个版本的MongoDB实例。

  3. 路径冲突:如果两个MongoDB实例配置的数据目录或日志目录相同,可能会导致数据覆盖或损坏。

  4. 版本冲突:如果两个MongoDB实例的版本不同,可能会导致客户端工具、驱动程序或应用程序与MongoDB实例的兼容性问题。

  5. 管理复杂性:维护两个MongoDB实例意味着你需要记住两套配置、两个不同的命令集以及两个服务的启动和停止方式,这增加了管理的复杂性。

为了避免这些问题,建议你选择一种安装方式,并且坚持使用它:

  • 如果选择Homebrew:你可以通过brew services管理MongoDB服务,并且依赖Homebrew来处理版本更新和路径配置。

  • 如果选择手动安装:你需要自己管理MongoDB的启动、停止、配置和更新。

卸载用Homebrew安装的MongoDB,可以运行:

brew services stop mongodb 
brew uninstall mongodb

如果你想删除手动安装的MongoDB,你需要停止服务(如果它正在运行),然后删除MongoDB的文件夹和配置文件。

在做出决定之前,请确保备份所有重要的数据,以免在卸载过程中丢失。

执行mongo命令提示command not found

首先想到的原因是没有配置环境变量会有这个问题,

即使你已经配置过环境变量,这可能是由以下原因引起的:

  1. 环境变量未生效:你可能在配置文件中正确设置了环境变量,但是更改可能还没有生效。你可以通过关闭并重新打开你的终端窗口来刷新环境变量,或者在当前终端中运行source ~/.bash_profile(或对应的配置文件,比如~/.zshrc~/.bashrc等,取决于你使用的shell)来使更改立即生效。

  2. 错误的环境变量路径:你可能在环境变量中设置了错误的路径。检查你的.bash_profile.bashrc.zshrc或其他shell配置文件中的PATH环境变量,确保它包含了MongoDB的可执行文件目录。对于Homebrew安装的MongoDB,它通常位于/usr/local/bin目录中。

  3. 配置文件未加载:如果你使用的是非常规的shell或者有特殊的配置,可能你的环境变量配置文件(如.bash_profile.bashrc.zshrc等)没有被加载。确保你在正确的文件中添加了环境变量,并且这个文件在你的shell启动时会被读取。

  4. 多个MongoDB版本:由于你提到电脑上同时用brew安装了MongoDB,也手动安装了MongoDB,可能存在多个版本的MongoDB。确保你的PATH环境变量指向的是你想要使用的MongoDB版本的路径。

  5. 权限问题:可能是由于权限问题导致的。确认mongo命令的可执行文件是否具有适当的执行权限。

  6. Shell不识别更改:如果你使用的是zsh而不是bash,你需要在.zshrc而不是.bash_profile中设置环境变量。

你可以通过执行以下命令来确认mongo命令的位置:

which mongo

或者查找系统中所有mongo命令的位置:

find / -name mongo 2>/dev/null

如果以上命令返回了mongo命令的路径,确保这个路径被包含在你的PATH环境变量中。如果命令没有返回任何路径,那么可能你的MongoDB没有安装正确,或者mongo命令的路径没有被加入到PATH中。

一旦你找到了正确的mongo命令路径,你可以通过以下命令将它添加到你的PATH环境变量中(假设mongo命令位于/path/to/mongo/bin):

export PATH="/path/to/mongo/bin:$PATH"

然后将这行添加到你的shell配置文件中(.bash_profile.bashrc.zshrc等),保存文件,并重新加载配置或重启你的终端。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WordPres Bricks Builder 前台RCE漏洞复现(CVE-2024-25600)

0x01 产品简介 Bricks Builder是一款用于WordPress的开发主题,提供直观的拖放界面,用于设计和构建WordPress网站。它使用户能够轻松创建自定义的网页布局和设计,无需编写或了解复杂的代码。Bricks Builder具有用户友好的界面和强大的功能,使用户可以通过简单的拖放操作添加…

Vue图片浏览组件v-viewer,支持旋转、缩放、翻转等操作

Vue图片浏览组件v-viewer&#xff0c;支持旋转、缩放、翻转等操作 之前用过viewer.js&#xff0c;算是市场上用过最全面的图片预览。v-viewer&#xff0c;是基于viewer.js的一个图片浏览的Vue组件&#xff0c;支持旋转、缩放、翻转等操作。 基本使用 安装&#xff1a;npm安装…

浅谈TCP协议的可靠含义和三次握手

这里不过多阐述计算机网络的体系结构&#xff0c;本文主要是想阐述三次握手和可靠连接之间的联系。TCP协议全称传输控制协议&#xff08;Transmission Cotrol Protocol&#xff09;。 1、TCP协议运行在哪一层 TCP运行在运输层。 2、TCP协议的可靠是什么意思 步入主题&…

MLflow【部署 01】MLflow官网Quick Start实操(一篇学会部署使用MLflow)

一篇学会部署使用MLflow 1.版本及环境2.官方步骤Step-1 Get MLflowStep-2 Start a Tracking ServerStep 3 - Train a model and prepare metadata for loggingStep 4 - Log the model and its metadata to MLflowStep 5 - Load the model as a Python Function (pyfunc) and us…

Hackme 1

信息收集 Nmap部分 存活扫描&#xff1a; └─# nmap -sn 192.168.10.1/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-02-20 15:00 CST Nmap scan report for 192.168.10.1 (192.168.10.1) Host is up (0.00012s latency). MAC Address: 00:50:56:C0:00:08 (VMwar…

matlab代码--基于matlabLDPC-和积译码系统

LDPC编码 一个码长为n、信息位个数为k的线性分组码&#xff08;n,k&#xff09;可以由一个生成矩阵 来定义&#xff0c;信息序列 通过G被映射到码字XS.G。线性分组码也可以由一个校验矩阵 来描述。所以码字均满足 。校验矩阵的每一行表示一个校验约束 &#xff0c;其中所有的非…

C++入门学习(三十二)二维数组定义方式

一维数组类似于一条“线”&#xff0c;而二维数组类似于一个“面”&#xff0c;二维数组也更像一个表格&#xff0c;由我们在“表格”中查询数据。 1、先定义数组&#xff0c;后赋值 int arr[2][3]; #include <iostream> using namespace std;int main() { int arr…

分类预测 | Matlab实现CWT-DSCNN-MSA基于时序特征、cwt小波时频图的双流卷积融合注意力机制的分类预测

分类预测 | Matlab实现CWT-DSCNN-MSA基于时序特征、cwt小波时频图的双流卷积融合注意力机制的分类预测 目录 分类预测 | Matlab实现CWT-DSCNN-MSA基于时序特征、cwt小波时频图的双流卷积融合注意力机制的分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab…

day6 2/22

1> 将互斥机制的代码实现重新敲一遍 #include<myhead.h> int num520; pthread_mutex_t mutex;//创建互斥锁 void*task1(void*arg) {pthread_mutex_lock(&mutex);sleep(3);num;printf("%d\n",num);pthread_mutex_unlock(&mutex);pthread_exit(NULL)…

2024/2/22

P8680 [蓝桥杯 2019 省 B] 特别数的和 题目描述 小明对数位中含有 2、0、1、9 的数字很感兴趣&#xff08;不包括前导 00&#xff09;&#xff0c;在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40&#xff0c;共28 个&#xff0c;他们的和是574。 请问&#xff0c;在…

【Git】:标签功能

标签功能 一.标签操作二.推送远程标签 标签 tag &#xff0c;可以简单的理解为是对某次commit的⼀个标识&#xff0c;相当于起了⼀个别名。例如&#xff0c;在项⽬发布某个版本的时候&#xff0c;针对最后⼀次commit起⼀个v1.0这样的标签来标识⾥程碑的意义。这有什么⽤呢&…

CRF算法(Conditional Random Fields)揭秘

CRF基本介绍 在机器学习中&#xff0c;建模线性序列结构的方法&#xff0c;除了HMM算法&#xff0c;另一个重要的模型就是CRF。HMM为了降低模型复杂性&#xff0c;对观测变量做了独立假设(即隐状态之间有相关性&#xff0c;而观测变量之间没有相关性)&#xff0c;这在某种程度…

五种多目标优化算法(MSSA、MOJS、NSWOA、MOPSO、MOAHA)性能对比,包含6种评价指标,9个测试函数(提供MATLAB代码)

一、5种多目标优化算法简介 1.1MSSA 1.2MOJS 1.3NSWOA 1.4MOPSO 1.5MOAHA 二、5种多目标优化算法性能对比 为了测试5种算法的性能将其求解9个多目标测试函数&#xff08;zdt1、zdt2 、zdt3、 zdt4、 zdt6 、Schaffer、 Kursawe 、Viennet2、 Viennet3&#xff09;&#xff0c…

C2-1.4(L1,L2)正则化

C2-1.4&#xff08;L1,L2&#xff09;正则化 参考书籍 1 正则化的概念 正则化(Regularization) 是机器学习中对原始损失函数引入额外信息&#xff0c;以便防止过拟合和提高模型泛化性能的一类方法的统称。也就是目标函数变成了原始损失函数额外项&#xff0c;常用的额外项一般…

Python实现简易小钢琴

Python实现简易小钢琴 使用Python和内带的Tkinter库、winsound 模块实现的简单小钢琴。 Tkinter库和winsound模块不需要额外安装就可以使用&#xff0c;因为它们是Python的标准库之一&#xff0c;已经随着Python的安装包一起提供。标准库是Python官方提供的一组核心模块和工具…

MFC 多文档程序的基本编程

下载了一个openGL mfc的多文档程序,以此来学习mfc多文档模式的编程; 它每次新建一个文档,会在窗口绘制一个三角形、一个矩形;如果没有了图形刷新一下; 先看一下为什么每次打开新文档会绘制图形; 生成工程之后主要有5个类,比单文档程序多了一个子框架类; 可以打开多个…

C++:STL简介

1. 什么是STL STL(standard template libaray- 标准模板库 ) &#xff1a; 是 C 标准库的重要组成部分 &#xff0c;不仅是一个可复用的组件库&#xff0c;而且 是一个包罗数据结构与算法的软件框架 。 2. STL的版本 3. STL的六大组件 4.STL的缺陷 1. STL库的更新太慢了。这…

计算机设计大赛 深度学习乳腺癌分类

文章目录 1 前言2 前言3 数据集3.1 良性样本3.2 病变样本 4 开发环境5 代码实现5.1 实现流程5.2 部分代码实现5.2.1 导入库5.2.2 图像加载5.2.3 标记5.2.4 分组5.2.5 构建模型训练 6 分析指标6.1 精度&#xff0c;召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…

【海贼王的数据航海:利用数据结构成为数据海洋的霸主】时间复杂度 | 空间复杂度

目录 1 -> 算法效率 1.1 -> 如何衡量一个算法的好坏&#xff1f; 1.2 -> 算法的复杂度 2 -> 时间复杂度 2.1 -> 时间复杂度的概念 2.2 -> 大O的渐进表示法 2.3 -> 常见时间复杂度计算 3 -> 空间复杂度 4 -> 常见复杂度对比 1 -> 算法效…

第2部分 基础篇 第2章 隐私计算技术简介(1)

2.6.1. 隐私计算技术解决什么问题&#xff1f; 本聪老师&#xff1a;关于隐私计算&#xff0c;我想先问大家一个问题&#xff1a;隐私计算技术能够解决什么问题&#xff1f; 小明&#xff1a;是不是应该是保护用户的隐私。 本聪老师&#xff1a;可以这么说&#xff0c;但是怎…