在ubuntu 18上安裝MongoDB


本文介紹 MongoDB Community EditionUbuntu 下的安裝和常見配置方法。文中操作基於 MongoDB Community Edition 4.2.2Ubuntu 18.04 。對於不同的系統和版本,操作方式和方法可能會有不同。

基礎安裝

本節簡單講解在Ubuntu下 MongoDB 基本的安裝步驟。

  1. 安裝GPG公鑰
    wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
    
  2. 添加APT源
    echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
    
  3. 重載本地包數據庫
    sudo apt-get update
    
  4. 安裝mongoDB
    sudo apt-get install -y mongodb-org
    
  5. 檢查mongoDB包安裝信息
    apt list --installed mongodb*
    
    正常情況下,可以看到以下信息
    mongodb-org/bionic,now 4.2.2 amd64 [installed]
    mongodb-org-mongos/bionic,now 4.2.2 amd64 [installed]
    mongodb-org-server/bionic,now 4.2.2 amd64 [installed]
    mongodb-org-shell/bionic,now 4.2.2 amd64 [installed]
    mongodb-org-tools/bionic,now 4.2.2 amd64 [installed]
    
  6. 啟動系統服務
    sudo systemctl enable mongod.service
    sudo systemctl start mongod.service
    
  7. 檢查服務狀態
    systemctl status -l mongod.service
    
    如果 mongod.service 的狀態不是 active(running) ,可以根據 systemctl status 命令的輸出和日志文件 /var/log/mongodb/mongod.log 來排查問題原因。

客戶端連接

MongoDB 服務啟動成功后,可以使用 MongoDB JavaScript Shell 客戶端來訪問數據庫了:

mongo --host 127.0.0.1 --port 27017

默認配置下,MongoDB 監聽本地localhost27017端口。此時,啟動 MongoDB JavaScript Shell 時也可以省略地址和端口參數。連接成功后就可以操作數據庫了。比如查看現有的database:

> show dbs;
admin   0.000GB
config  0.000GB
local   0.000GB

安裝操作詳解

接下來會對安裝過程做進一步講解,基於這部分內容,可以對 MongoDB 的安裝和基本配置進行部分自定義。

安裝指定組件和版本

在一節內容中,可以看到當 MongoDB 的包安裝完成后,可以看到多個組件被安裝。這些組件分別是

包名 描述
mongodb-org 包含所有組件包的元包,安裝此包會包含以下所有組件
mongodb-org-server MongoDB 服務器,主要是 mongod 進程程序和相關資源和腳本
mongodb-org-mongos mongos 進程,用於在 MongoDB 分片集群中將客戶端請求分發到各服務節點
mongodb-org-shell MongoDB JavaScript Shell 客戶端
mongodb-org-tools 其他 MongoDB 工具, mongoimport, bsondump, mongodump, mongoexport,mongofiles,mongorestore,mongostat,和mongotop

可以根據需要安裝指定的組件,比如只安裝 MongoDB JavaScript Shell 來訪問遠程服務:

sudo apt install mongodb-org-shell

系統服務配置

MongoDB 服務安裝完成后,會創建系統服務文件 /lib/systemd/system/mongod.service。可以根據需要修改此文件。

比如,服務文件里包含以下一些配置:

[Service]
User=mongodb
Group=mongodb
ExecStart=/usr/bin/mongod --config /etc/mongod.conf

UserGroup指定了啟動 MongoDB 服務進程所使用的用戶mongodb和同名用戶組mongodb。這個用戶和用戶組是在安裝 MongoDB 時自動創建的。可以在必要時指定為期望的值。當修改后,要注意同時修改相關目錄和文件的權限。

ExecStart指定了啟動服務進程的命令,可以看到這里顯示指定了使用配置文件/etc/mongod.conf。可以修改這條配置項讓數據庫使用其他配置文件,也可以添加其他啟動參數。

如果希望在同一台服務器上啟動多個 MongoDB 服務,可以復制服務文件,並修改后啟用。

如果是在啟用服務之后對服務文件做了修改,需要重載配置再重啟服務:

sudo systemctl daemon-reload
sudo systemctl restart mongod.service

基礎配置

本節介紹一些 MongoDB 配置文件中常用的配置項。默認情況下,這些配置保存在文件/etc/mongod.conf中。當配置項修改后,需要重啟服務才能生效。

指定監聽地址和端口

默認情況下,非分片集群下的 MongoDB 監聽 localhost 上的 27017端口。在沒有顯示指定配置文件時,這個是由配置文件中的 net.portnet.bindIp配置頂控制:

# network interfaces
net:
    port: 27017
    bindIp: 127.0.0.1

這時, MongoDB 只接受來自於同一台服務器上的本地連接,所以通常都會需要修改監聽的地址。比如希望監聽所有的IPv4地址,就可以將 net.bindIp 項的值由 127.0.0.1 修改為 0.0.0.0。如果需要調整監聽的端口,則將 net.port 配置頂的值由 27017 修改為期望值。

修改數據存儲

MongoDB 的數據存儲目錄是由配置文件中的 storage.dbPath 配置項來控制的。默認情況下數據保存在 /var/lib/mongodb 目錄下:

# Where and how to store data.
storage:
  dbPath: /var/lib/mongodb

可以根據自己的需要修改數據目錄。在修改之前要確保目錄已經存在,並且權限設置正確。目錄的所有者應當為 mongodb:mongodb,或者啟動進程的用戶有讀寫權限。

如果數據庫之前已經有數據了,需要把之前數據目錄下的文件都復制到新目錄下,否則 MongoDB 會新建空的數據文件結構。

修改日志配置

默認情況下 MongoDB 日志記錄在文件 /var/log/mongodb/mongod.log 中。這個是由 systemLog 相關配置項決定的:

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

如果要修改日志文件位置,就根據需要修改 systemLog.path 配置項的值。不過要注意日志文件所在目錄的權限。運行 MongoDB 進程的用戶需要有日志目錄的讀寫權限。默認情況下使用的用戶是 mongodb:mongodb

如果希望日志文件可以輪轉(log rotate),則需要添加配項 systemLog.logRotate:

    # where to write logging data.
    systemLog:
      destination: file
      logAppend: true
      logRotate: true
      path: /var/log/mongodb/mongod.log

訪問控制

默認配置下,MongoDB 是沒有開啟訪問控制的。此時,用戶訪問數據庫不需要做驗證,並且擁有所有的權限。所以在安裝完成后,應當立刻開啟數據庫的訪問控制。

  1. 連接到本地數據庫后,在客戶端執行以下命令
    use admin
    db.createUser(
      {
        user: "admin",
        pwd: passwordPrompt(),
        roles: [
          { role: "userAdminAnyDatabase", db: "admin" },
          "readWriteAnyDatabase"
        ]
      }
    )
    
    此命令用在 admin 數據庫下創建一個名為 admin 的賬號。createUser方法參數JSON中的 pwd 字段用來指定賬號的密碼。這里指定的是另一個方法 passwordPrompt。這個方法在執行createUser命令時,會提示並等待用戶在客戶端輸入密碼。roles指定用戶的角色和權限。這里給 admin 授權的第一個權限是 admin 數據庫的管理權限。admin數據庫是 MongoDB 用來管理用戶的,所以有了這個權限,就可以用來管理數據庫的其他賬號了。第二個權限 readWriteAnyDatabase 是對所有數據庫的讀寫權限。
  2. 在Ubuntu終端中關閉 MongoDB 服務:
    sudo systemctl stop mongod.service
    
  3. 在配置文件將security.authorization配置頂設置為true來開啟訪問控制:
    security:
      authorization: enabled
    
  4. 啟動 MongoDB 服務來使配置生效:
    sudo systemctl start mongod.service
    
  5. 使用admin登錄
    mongo -u admin -p
    
  6. 給應用數據庫創建賬號,比如app_db下創建賬號app_admin:
    use app_db
    db.createUser(
      {
        user: "app_admin",
        pwd: passwordPrompt(),
        roles: [ "readWrite" ]
      }
    )
    

這里創建的賬號是有app_db下的讀寫權限readWrite的。如果想創建只讀賬號,則需要指定權限為read

  1. 使用普通賬號登錄
    mongo --authenticationDatabase app_db -u app_admin -p
    
    和之前使用admin賬號登錄不同,這里指定了authenticationDatabase參數值為app_db,因為app_admin是在app_db下創建的賬號。

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM