MongoDB資料庫安裝

豐澤發表於2018-10-22

一、MongoDB的安裝:

環境:

CentOS 7

MongoDB 3.4.9

下載MongoDB:

首先去MongoDB官網下載MongoDB,地址https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.4.9.tgz。將下載的檔案放到/usr/local/mongodb 目錄下。

解壓:

解壓下載到的tgz檔案,並給資料夾重新命名為mongodb,然後建立db、logs目錄分別用來存放資料和日誌。如下:

MongoDB資料庫安裝

配置:

dbpath=/opt/mongodb/db
logpath=/opt/mongodb/logs/mongodb.log
port=27017
fork=true
nohttpinterface=true
複製程式碼

執行結果如下:

MongoDB資料庫安裝
測試:

做完這一切之後,我們就可以啟動MongoDB了,還是在bin目錄下,執行./mongod -f mongodb.conf命令表示啟動MongoDB,然後執行mongo命令表示表示進入到MongDB的控制檯,進入到控制檯之後,我們輸入db.version()命令,如果能顯示出當前MongoDB的版本號,說明安裝成功了。如下:

MongoDB資料庫安裝

預設情況下,連線地址是127.0.0.1:27017,連線的資料庫是test資料庫,我們也可以手動指定連線地址和連線的資料庫:

mongo 127.0.0.1:27017/admin 系統服務啟動: 使用系統服務命令啟動需要先將服務加入到系統服務中,如下指令碼配置檔案:

MongoDB安裝之後,每次都需要執行命令加引數來啟動,不便於管理,這裡可以將其新增到系統服務,方法如下:
1、建立檔案
linux系統服務啟動檔案都存放在  /etc/init.d/ 下面,service mongod start 這樣的命令是通過執行該目錄下的指令碼實現管理的,所以需要建立一個指令碼檔案mongod並修改讀寫許可權
>touch mongod
>chmod 755 mongod 
另外還需要用到一個檔案來儲存服務pid,service mongod stop 命令就是通過這個檔案讀取服務pid的,可以建立在MongoDB的安裝目錄下面,
>cd /usr/local/server/mongodb/
>touch mongod.pid
>chmod 755 mongod.pid
2、編寫mongod指令碼,以下為編寫好的指令碼示例:

##--------------------------------------------------------
#!/bin/bash     
#chkconfig:35 23 34   
#description: MongoDB  service
#set -x

if [ -f  /etc/init.d/functions ] ; then
##載入functions,. 在這裡相當於source的功能
. /etc/init.d/functions     
fi

##服務名,會多處呼叫
prog=mongod  

##狀態返回值,functions 函式會呼叫這個值
RETVAL=0  

mongod=/usr/local/server/mongodb/bin/mongod
MONGODB_CONF_FILE=/usr/local/server/mongodb/mongodb.conf
lockfile=/var/lock/subsys/${prog}                          ##subsys目錄下的檔案是用於給其他程式判斷服務的例項執行狀態的
pidfile=/usr/local/server/mongodb/mongod.pid
 
start() {
      echo  -n $"Starting $prog: "
      daemon $mongod  --config $MONGODB_CONF_FILE ##daemon呼叫後面的命令執行情況
  pgrep mongod>${pidfile}                     ##寫入pid到pidfile
      RETVAL=$?
      echo 
      [ $RETVAL  -eq  0  ] &&  touch ${lockfile}
      return $RETVAL
}

stop () {
      echo  -n $"Stopping $prog: "
      killproc -p ${pidfile}    ##killproc 從pidfile 獲取到pid,並殺死
      RETVAL=$?
      echo 
      [ $RETVAL  -eq  0  ] &&  /bin/rm -f ${lockfile}
      return $RETVAL
}
 
 
case $1 in 
start) 
start
;;

stop)
stop
;;

restart)
stop
start
;;

*)
echo $"Usage: $0 {start|stop|restart}"
exit 2
;;
esac

exit $?
##-------------------------------------------------------------------

3、通過這個指令碼就可以實現系統服務啟動、關閉、重啟mongod服務了,然後我們可以讓他開機啟動:
>chkconfig mongod on
複製程式碼

service mongod start|stop|restart

注:可以將mongodb臨時加入系統路徑變數中,這樣可以不用輸入路徑直接啟動,程式碼如下:

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

然後可以檢視是否成功:echo $PATH

二、使用者授權和管理

1、mongodb安裝好後第一次進入是不需要密碼的,也沒有任何使用者,通過shell命令可直接進入,cd到mongodb目錄下的bin資料夾,執行命令./mongo即可
執行如下:
[root@namenode mongodb]# ./bin/mongo
MongoDB shell version: 1.8.2
connecting to: test
> use test;
switched to db test
2、新增管理使用者(mongoDB 沒有無敵使用者root,只有能管理使用者的使用者 userAdminAnyDatabase),
>use admin
>db.createUser( {user: "admin",pwd: "123456",roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]})
注:新增完使用者後可以使用show users或db.system.users.find()檢視已有使用者
3、新增完管理使用者後,關閉MongoDB,並使用許可權方式再次開啟MongoDB,這裡注意不要使用kill直接去殺掉mongodb程式,(如果這樣做了,請去data/db目錄下刪除mongo.lock檔案),可以使用db.shutdownServer()關閉
4、使用許可權方式啟動MongoDB
./mongod --dbpath=/usr/local/server/mongodb/data --logpath=/usr/local/server/mongodb/mongod.log --fork --auth
或者在配置檔案中修改:
 auth = true
#noauth = true
5、進入mongo shell,使用admin資料庫並進行驗證,如果不驗證,是做不了任何操作的。 
> use admin
> db.auth("admin","123456")   #認證,返回1表示成功
6、驗證之後還是做不了操作,因為admin只有使用者管理許可權,下面建立使用者,使用者都跟著庫走,
> use mydb
> db.createUser({user: "root",pwd: "123456",roles: [{ role: "readWrite", db: "mydb" }]})
7、使用建立的使用者root登入進行資料庫操作:
[root@localhost mongodb]# mongo 127.0.0.1/mydb -uroot -p
MongoDB shell version: 3.2.9
Enter password:
connecting to: 127.0.0.1/mydb
> db
mydb
> use mydb
switched to db mydb
> show collections
然後就可以進行增刪改查各種資料操作...
複製程式碼

問題:

當我們敲入db.auth("admin", "admin")時,返回為0,出現Error: Authentication failed。 解決方法: 手動新增admin賬戶,建立成功後,再次db.auth("admin", "123456"),返回1。程式碼如下:

db.createUser(  
  {  
    user: "admin",  
    pwd: "123456",  
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]  
  }  
)
複製程式碼

相關文章