在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等),保存文件,并重新加載配置或重啟你的終端。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/696746.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/696746.shtml
英文地址,請注明出處:http://en.pswp.cn/news/696746.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

備戰藍橋杯 Day11(滾動數組優化+完全背包)

01背包的滾動數組優化 【題目描述】 經典0—1背包問題,有n個物品&#xff0c;編號為i的物品的重量為w[i]&#xff0c;價值為c[i]&#xff0c;現在要從這些物品中選一些物品裝到一個容量為m的背包中&#xff0c;使得背包內物體在總重量不超過m的前提下價值盡量大。 #include&…

python_數據分析_numpy庫

一、創建ndarray *ndarray是NumPy中表示數組的重要類型 1、使用np.array()創建 *參數列表&#xff1a;[1,2,3,4] 注&#xff1a;(1)、numpy默認ndarray的所有元素的類型是相同的 ? (2)、如果傳入的數據類型不同&#xff0c;會被按照優先級強制轉換為同一類型&#xff0c;其…

vue--兩種定時任務cron表達式組件比較選擇

背景&#xff1a; 使用vue頁面中cron表達式的組件&#xff0c;實現定時任務參數配置。 方案1 vue-cron 安裝插件 npm install vue-cron --save 全局引入&#xff0c;修改main.js import Vue from vue import VueCron from vue-cron Vue.use(VueCron);頁面配置 html<el-…

Java入門-可重入鎖

可重入鎖 什么是可重入鎖? 當線程獲取某個鎖后&#xff0c;還可以繼續獲取它&#xff0c;可以遞歸調用&#xff0c;而不會發生死鎖&#xff1b; 可重入鎖案例 程序可重入加鎖 A.class,沒有發生死鎖。 sychronized鎖 package com.wnhz.lock.reentrant;public class Sychroniz…

多普勒變化率的應用 與 FPGA

1.多普勒變化率是一個描述波源和觀察者相對速度變化的物理量&#xff0c;它與加速度有關。 多普勒效應是指當波源和觀察者之間存在相對運動時&#xff0c;觀察者接收到的波頻率與波源發射的頻率之間的差異。這種現象在聲波、電磁波等多種波動中都會出現。多普勒變化率通常用來…

linux系統內核升級

1.查看舊版本內核 2.導入密鑰 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 3.安裝yum源 rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm4.啟用elrepo-kernel倉庫并安裝最新內核版本 yum --enablerepoelrepo-kernel install …

一文弄明白KeyedProcessFunction函數

引言 KeyedProcessFunction是Flink用于處理KeyedStream的數據集合&#xff0c;它比ProcessFunction擁有更多特性&#xff0c;例如狀態處理和定時器功能等。接下來就一起來了解下這個函數吧 正文 了解一個函數怎么用最權威的地方就是 官方文檔 以及注解&#xff0c;KeyedProc…

c++實現棧和隊列類

c實現棧和隊列類 棧(Stack)Stack示意圖Stack.cpp 隊列(queue)queue 示意圖queue.cpp 棧(Stack) Stack示意圖 Stack.cpp #pragma once #include "ListStu.cpp"template<typename T> class Stack { public: /* * void push(T& tDate)* 參數一 &#xff1a;…

【OCR專題文章】

目錄 一、數據獲取及預處理方法篇 二、兩階段算法篇(檢測識別) 三、一階段算法篇(Enc-Dec) 四、拓新篇 本欄聚焦在OCR的相關算法&#xff0c;專欄內文章的代碼均已實現。 一、數據獲取及預處理方法篇 【數據獲取】 合同數據獲取&#xff1a;【OCR】【專題系列】二、數據獲取-…

解決windows無法訪問wsl下docker服務

筆者在初學使用wsl跑docker時,遇到了windows無法訪問的問題,并且瀏覽了大部分的文章,發現并沒有起效,在反復試錯終于成功之后,總結為以下幾點: 1.升級至wsl2 2.將.wslconfig文件(用戶文件夾下)中的如下鏡像服務關閉刪除 networkingModemirrored 3.打開wsl防火墻相應的端口 …

記錄解決uniapp使用uview-plus在vue3+vite+ts項目中打包后樣式不能顯示問題

一、背景 從 vue2uview1 升級到 vue3vitetsuview-plus ,uview組件樣式打包后不顯示&#xff0c;升級前uview 組件是可以正常顯示&#xff0c;升級后本地運行是可以正常顯示&#xff0c;但是打包發布成H5后uview的組件無法正常顯示&#xff0c;其他uniapp自己的組件可以正常顯示…

Vue 中 onclick和@click區別

文章目錄 一、直接上結論二、驗證代碼&#xff0c;可直接運行三、點擊結果 一、直接上結論 onclick 只能觸發 js的原生方法&#xff0c;不能觸發vue的封裝方法click 只能觸發vue的封裝方法&#xff0c;不能觸發js的原生方法 二、驗證代碼&#xff0c;可直接運行 <!DOCTYP…

Vue3 + Ts (使用lodash)

安裝 npm i --save lodash使用 import _ from lodash??報警告&#xff1a;&#xff01;&#xff01;&#xff01; 此時還需要安裝ts聲明文件庫 npm install types/lodash -D安裝之后重啟Vscode還是會提示上面的警告&#xff0c;此時還需在tsconfig.ts里面配置 {"c…

快速將excel/word表格轉換為web頁面(html)的方法

前言 在進行開發企業信息化建設的過程&#xff0c;應該有很多這樣的場景&#xff0c;就是將現有的電子表格記錄的方式轉換為在數據系統中進行網頁上報。也就是需要根據當前一直使用的表格制作一個上傳這個表格信息的網頁&#xff0c;如果要減少系統的使用學習成本&#xff0c;…

【Day55】代碼隨想錄之動態規劃_買賣股票含冷凍期和手續費

文章目錄 動態規劃理論基礎動規五部曲&#xff1a;出現結果不正確&#xff1a; 1. 最佳買賣股票的時機含冷凍期2. 買賣股票的最佳時機含手續費 動態規劃理論基礎 動規五部曲&#xff1a; 確定dp數組 下標及dp[i] 的含義。遞推公式&#xff1a;比如斐波那契數列 dp[i] dp[i-1…

【Elasticsearch專欄 01】深入探索:Elasticsearch的正向索引和倒排索引是什么

文章目錄 什么是Elasticsearch的正向索引和倒排索引&#xff1f;1.倒排索引&#xff08;Inverted Index&#xff09;2.正向索引&#xff08;Forward Index&#xff09;3.小結 什么是Elasticsearch的正向索引和倒排索引&#xff1f; 首先&#xff0c;要明確的是&#xff0c;Ela…

leetcode:78.子集

1.樹形結構&#xff1a;往后依次取該數字往后的數字&#xff08;前面的不要取&#xff0c;否則子集會重復&#xff09;&#xff1b;每一層遞歸的結果都要放入結果集&#xff0c;而并非只放葉子節點。 代碼實現&#xff1a; #達到了葉子節點&#xff08;終止條件&#xff09; …

抖音百科詞條創建在哪里?

抖音百科就是頭條百科&#xff0c;頭條百科是一個在線百科全書平臺&#xff0c;用戶可以在上面創建、編輯和瀏覽各種百科詞條。頭條百科詞條可以被抖音抓取到&#xff0c;從而獲得更多流量和曝光&#xff0c;所以當你創建一個抖音百科詞條的時候&#xff0c;就能更加提高自身的…

logbak日志單獨打印(方法層級)

logbak日志單獨打印 問題 前幾天朋友在群里問&#xff0c;怎么針對方法打印打印日志&#xff0c;不是針對類。 解決辦法 方法層 GetMapping("getLog1")public String getLog1(){Logger specialLogger LoggerFactory.getLogger(TestController.class.getName() …

人工智能_CPU安裝運行ChatGLM大模型_ChatGlm-6B_啟動命令行對話_安裝API調用接口_005---人工智能工作筆記0100

然后我們再進入 /data/module/ChatGLM-6B-main文件夾 然后我們去啟動,命令行工具 python3 cli_demo.py 可以看到也是可以用了. 正常可以用了. 然后主要來看,如何使用api來調用呢,這樣才可以,做自己的界面 可以看到就非常簡單了只需要: 走到 /data/module/