Intro
Mongodb本身已經是比較成熟並已經廣泛使用的一款nosql產品。瞭解該產品最好的方式當然是官網,考慮到網路和語言習慣,一些具有中文站則會給我們更大的便利。這篇文章主要記錄一下折騰Mongodb3.x的一些步驟,其中所有的內容都是通過閱讀官方文檔瞭解的。
一、Mongodb安裝
由於大部分時候Mongodb serever都是跑在Linux環境下,所以這裡預設作業系統都是Linux centos6。Mongodb版本為當前最新,v3.4.2。 tgz包下載
wget 'https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.4.2.tgz'
解壓縮
tar zxvf mongodb-linux-x86_64-amazon-3.4.2.tgzcd mongodb-linux-x86_64-amazon-3.4.2/bin
這裡會看到所有Mongodb相關的可執行檔,目前只關注
executable |
desc |
mongod |
Server啟動程式 |
mongo |
Client啟動程式 |
二、Mongodb啟動 1. 啟動Server
知道了Mongodb server的開機檔案是mongod,那麼猜想 ./mongod既能啟動server,但是很自然我們首先會關注這樣幾個問題。
1) 預設監聽連接埠是多少,如果設定我自己想用的連接埠號碼
2) 作業記錄在哪裡看
3) 持久化的資料檔案放在哪裡
4) 是否有設定檔支援更多細節的配置
啟動命令
./mongod --port 27017 --dbpath /mongodb/data --logpath /logs/mongodb.log -f /mongodb/server.conf
以上命令解答上面提到的4個問題。
--port 指定用戶端串連連接埠號碼,預設27017--dbpath 持久化資料所在路徑,啟動前該路徑必須存在--logpath 記錄檔-f 指定設定檔,簡單的properties檔案,自己建立即可
如果個人化參數都寫在設定檔中會讓啟動命令變得清爽一些,我自己是這樣做的
./mongod -f /mongodb/server.conf
設定檔 cat /mongodb/server.conf
port=27017logpath=/logs/mongodb.loglogappend=true #日誌生產方式 (追加/覆蓋)dbpath=/mongodb/data
2. 用戶端串連
Mongodb client的開機檔案是mongo,而我們又知道mongodb服務的ip:port,猜都能猜到用戶端串連命令
./mongo 127.0.0.1:27017
如果串連成功,mongodb的安裝就到此結束了。
三、許可權配置
現在mongodb已經安裝啟動可以使用了,但是很奇怪,一直都沒有遇到過許可權問題,如果其他人也能隨意連上我的資料篡改資料豈不是麻煩了。那下一個要解決的問題 就是為我的資料庫加上許可權控制。
總的來說是以下幾步: 1. 開啟許可權驗證
在server.conf中加上一行
auth=true
2. 添加管理員帳號
這裡所說的管理員帳號不是像linux裡面無所不能的root,而是一個能分配帳號的帳號。在server所在的系統,用用戶端串連上server,執行以下代碼
use admindb.createUser({ user:'admin', pwd:'123456', roles:[{role:'userAdminAnyDatabase', db:'admin'}]})
這樣就建立了一個帳號,user為admin, 密碼為123456,他能在admin庫中管理任何庫的使用者。 3. 添加資料操作帳號
一旦開啟的許可權管理,接下來所有的操作都必須用合適的帳號去做,剛剛我們能成功的添加使用者,是因為這是我們的第一個帳號(第一就有特權,呵)。我們建立的admin帳號只能系統管理使用者,而我們真正需要的帳號是要能用來讀寫資料的,那就需要建立一個可讀寫資料的帳號。
接下來,我們要為一個名為”testDatabase”的庫添加讀寫使用者rwuser。
use admindb.auth("admin","123456")use testDatabasedb.createUser({ user:'rwuser', pwd:'123456', roles:[{role:'readWrite', db:'testDatabase'}]})
使用exit退出串連後,我們就可以使用該帳號串連server了
./mongo 127.0.0.1:27017/testDatabase -urwuser -p123456
四. mongodb相關概念
mongodb也存在和mysql類似的“庫”概念,大體概念是相似的,同樣預設會有一個test庫。Collection的概念則對應mysql中的表。
相關的命令:
command |
desc |
use ${databaseName} |
切換到databaseName |
db |
當前所在庫名 |
show collections |
列出當前所在庫中所有collection名字 |
show dbs |
列出所有庫 |
在這裡“庫”的概念之下,我們回頭看添加帳號時的一些操作。
//use testDatabase =>use admindb.createUser({ user:'rwuser', pwd:'123456', roles:[{role:'readWrite', db:'testDatabase'}]})
admin帳號登入後,為testDatabase庫建立帳號時,做了一次庫切換use testDatabase,可明明在roles:[{role:'readWrite', db:'testDatabase'}]這一行代碼裡已經指明給該帳號的是testDatabase庫的讀寫權限,還需要多此一舉嗎。在mongodb裡,這確實是有意義的。簡單的說來,就是在某個庫下建立的帳號,只能用來登入到這個庫,若再要操作其他庫,則需要先做庫切換。舉個例子,如果上一節中use testDatabase改成use admin,登入命令則需要改成:
./mongo 127.0.0.1:27017/admin -urwuser -p123456
而此時串連成功後是登入到admin庫,然後需要use testDatabase才能做後續的讀寫操作。