CentOS 安裝 MongoDB

1、安裝mongodb

本文介紹的安裝方式是以二進制方式離線安裝,至關於windows「綠色」安裝版本的概念。php

下載mongodb:html

# https://www.mongodb.com/download-center?initial=true#community
cd /usr/local
curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.3.tgz
tar xvzf mongodb-linux-x86_64-rhel70-4.0.3.tgz
mv mongodb-linux-x86_64-rhel70-4.0.3 /usr/local/mongodb

環境變量配置vi /etc/profilenode

export MONGODB_HOME=/usr/local/mongodb
export PATH=$MONGODB_HOME/bin:$PATH

運行mongod -v查看mongodb是否安裝成功linux

2、配置mongodb

自建數據庫文件夾:git

# root用戶執行
mkdir -p /data/mongodb # 自定義數據目錄
chmod 0755 /data/mongodb
mkdir -p /data/mongodb/log
touch /data/mongodb/log/mongod.log
chmod 0755 /lib/systemd/system/mongod.service

配置文件-mongod.conf

打開mongod.conf配置文件, 經過這個配置文件進行啓動.github

vim /etc/mongod.conf

配置文件內容:mongodb

dbpath=/data/mongodb
logpath=/data/mongodb/log/mongod.log
logappend=true
port=27017
bind_ip=0.0.0.0 # 爲了讓遠端能夠訪問
fork=true
##auth = true # 先關閉, 建立好用戶在啓動

# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

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

# Where and how to store data.
storage:
  #dbPath: /var/lib/mongo
  dbPath: /data/mongodb
  journal:
    enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:

# how the process runs
processManagement:
  fork: true  # fork and run in background
  #pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile
  pidFilePath: /data/mongodb/mongod.pid  # location of pidfile
  timeZoneInfo: /usr/share/zoneinfo

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0  # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting. # 爲了讓遠端能夠訪問


#security:

#operationProfiling:

#replication:

#sharding:

## Enterprise-Only Options

#auditLog:

#snmp:

經過配置文件啓動:shell

mongod -f /etc/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 2814
child process started successfully, parent exiting

出現successfully表示啓動成功了.數據庫

mongodb的參數說明(mongod -h):ubuntu

  • dbpath 數據庫路徑(數據文件)

  • logpath 日誌文件路徑

  • master 指定爲主機器

  • slave 指定爲從機器

  • source 指定主機器的IP地址

  • pologSize 指定日誌文件大小不超過64M.由於resync是很是操做量大且耗時,最好經過設置一個足夠大的oplogSize來避免resync(默認的 oplog大小是空閒磁盤大小的5%)。

  • logappend 日誌文件末尾添加

  • port 啓用端口號

  • fork 在後臺運行

  • only 指定只複製哪個數據庫

  • slavedelay 指從複製檢測的時間間隔

  • auth 是否須要驗證權限登陸(用戶名和密碼)

注:mongodb配置文件裏面的參數不少,定製特定的需求,請參考官方文檔

auth默認是關閉的,參考以下文章能夠打開:

參數:

systemd服務配置--mongod.service

cd /usr/lib/systemd/system # 或者 cd /lib/systemd/system
vi mongod.service

如下是後來嘗試yum install -y mongodb-org方式安裝4.0版本時,自動在/lib/systemd/system/mongod.service生成的文件,本次離線安裝借鑑來用,由於個人數據都在/data/mongodb目錄下,所以,將一些本來的操做註釋了:

[Unit]
Description=MongoDB Database Server
After=network.target
Documentation=https://docs.mongodb.org/manual

[Service]
User=root
Group=root
Environment="OPTIONS=-f /etc/mongod.conf"
EnvironmentFile=-/etc/sysconfig/mongod
ExecStart=/usr/bin/mongod $OPTIONS
# 註釋 ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb
ExecStartPre=/usr/bin/mkdir -p /data/mongodb
# 註釋 ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb
ExecStartPre=/usr/bin/chown root:root /data/mongodb
# 註釋 ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb
ExecStartPre=/usr/bin/chmod 0755 /data/mongodb
PermissionsStartOnly=true
# 註釋 PIDFile=/var/run/mongodb/mongod.pid
PIDFile=/data/mongodb/mongod.pid
Type=forking
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# locked memory
LimitMEMLOCK=infinity
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false
# Recommended limits for for mongod as specified in
# http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings

[Install]
WantedBy=multi-user.target

接着執行:systemctl daemon-reload

官網提示,在運行以前,還須要:

  • 防火牆設置,本文直接將防火牆關閉了:
systemctl disable firewalld.service
systemctl stop firewalld.service
  • SELinux設置

    Disable SELinux by setting the SELINUX setting to disabled in /etc/selinux/config

SELINUX=disabled

注意點

If you installed manually by downloading the tarballs, you can create the directories using mkdir -p or sudo mkdir -p depending on the user that will run MongoDB. (See your linux man pages for information on mkdir and sudo.)

By default, MongoDB runs using the mongod user account. If you change the user that runs the MongoDB process, you must also modify the permission to the /var/lib/mongo and /var/log/mongodb directories to give this user access to these directories.

默認狀況下,MongoDB使用mongod用戶賬戶運行。若是更改運行MongoDB進程的用戶,則還必須修改/var/lib/mongo/var/log/mongodb目錄的權限,以授予此用戶訪問這些目錄的權限。本文將數據都放在了/data/mongodb文件夾下,所以,權限也要注意設置正確。

參考這篇文章看到:

3、運行mongod服務

如今就可使用:

  • systemctl enable mongod 開機自啓服務
  • systemctl start mongod啓動服務;
  • systemctl status mongod 查看狀態
  • systemctl stop mongod 關閉服務

mongod服務中止也可使用:

mongod --shutdown -f /etc/mongod.conf
  • 殺進程:
ps -aux|grep mongo # 獲取mongod進程,例如是8888。
kill -2 8888 # 或者 kill -4 8888
# kill -9 8888該方式不安全,不推薦**
  • admin方式:
use admin
db.shutdownServer()

參考:

4、開機自啓動

systemctl eanble mongod

或者:

echo "/usr/local/mongodb/bin/mongod -f /etc/mongod.conf" >> /etc/rc.d/rc.local # 注意,命令須要使用絕對命令

參考:

5、mongo shell

進入 MongoDB後臺管理 Shell:

mongo # 前提是已經配置了環境變量
mongo --port 27017 # 進入端口27017的mongod實例

用戶設置:

賬號是跟着庫走的,因此在指定庫裏受權,必須也在指定庫裏驗證(auth)。

admin數據庫建立一個用戶:

use admin
db.createUser({user:"root",pwd:"root",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})

user表示用戶名,pwd表示密碼,role表示角色,db表示這個用戶應用在哪一個數據庫上。

角色名 備註
Read 容許用戶讀取指定數據庫
readWrite 容許用戶讀寫指定數據庫
dbAdmin 容許用戶在指定數據庫中執行管理函數,如索引建立、刪除,查看統計或訪問system.profile
userAdmin 容許用戶向system.users集合寫入,能夠找指定數據庫裏建立、刪除和管理用戶
clusterAdmin 只在admin數據庫中可用,賦予用戶全部分片和複製集相關函數的管理權限。
readAnyDatabase 只在admin數據庫中可用,賦予用戶全部數據庫的讀權限
readWriteAnyDatabase 只在admin數據庫中可用,賦予用戶全部數據庫的讀寫權限
userAdminAnyDatabase 只在admin數據庫中可用,賦予用戶全部數據庫的userAdmin權限
dbAdminAnyDatabase 只在admin數據庫中可用,賦予用戶全部數據庫的dbAdmin權限。
root 只在admin數據庫中可用。超級帳號,超級權限

驗證:

use admin
db # 查看當前所在的數據庫
db.auth('root','root')
show users # 查看當前數據庫的用戶

詳細權限配置參考網址:

6、MongoDB經常使用命令

#查看全部用戶
show users
#查看全部數據庫
show dbs
#查看全部的collection
show collections
#查看各collection的狀態
db.printCollectionStats()
#查看主從複製狀態
db.printReplicationInfo()

7、卸載MongoDB

systemctl stop mongod
yum erase $(rpm -qa | grep mongodb-org)
sudo rm -r /data/mongodb # /var/log/mongodb
sudo rm -r /var/lib/mongo

FAQ

Q1:使用uri的方式訪問數據庫,怎麼也沒法訪問

查看mongo服務是否啓動,mongd命令已經啓動了,並且mongo命令鏈接也OK。

查看官方文檔,發現默認ip是localhost,因此須要在配置文件中增長bind_ip=0.0.0.0才能訪問數據庫。

參考:centos搭建mongodb環境這篇文章也提到了bind_ip字段配置要正確,不然遠程鏈接不上。

Q2: Failed to start SYSV: Mongo is a scalable, document-oriented database

主要緣由在於mongodb相關文件件的權限問題致使的

Q3: mongodb getaddrinfo enotfound

與host設置有關係

用到的命令

netstat -lanp # 查看監聽的端口
telnet [ip] [port] # 查看端口是否OK
mongostat # 監控MongoDB的內存使用狀況

參考

相關文章
相關標籤/搜索