一、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目錄分別用來存放資料和日誌。如下:
配置:
dbpath=/opt/mongodb/db
logpath=/opt/mongodb/logs/mongodb.log
port=27017
fork=true
nohttpinterface=true
複製程式碼
執行結果如下:
測試:做完這一切之後,我們就可以啟動MongoDB了,還是在bin目錄下,執行./mongod -f mongodb.conf命令表示啟動MongoDB,然後執行mongo命令表示表示進入到MongDB的控制檯,進入到控制檯之後,我們輸入db.version()命令,如果能顯示出當前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" } ]
}
)
複製程式碼