MongoDB 安裝配置及用戶權限
參考: http://www.runoob.com/
mongodb/mongodb-linux-install.html
介紹:
a MongoDB是由C++語言編寫的一個基于分布式文件存儲的開源數據庫系統,它的目的在于為WEB應用提供可擴展的高性能數據存儲解決方案。
b MongoDB是一個介于
關系型數據庫和非關系型數據庫之間的產品,是非關系型數據庫當中功能最豐富,最像關系型數據庫的。它支持的數據結構非常松散,會將數據存儲為一個文檔,數據結構由鍵值對(key=>value)組成,是類似于json的bson格式,字段值可以包含其它文檔、數組和文檔數組,因此可以存儲比較復雜的數據類型。
c MongoDB最大的特點就是它支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現類似關系型數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。
d MongoDB的主要特點(來自于網上,主要為了我們初步了解)
d.1 MongoDB提供了一個面向文檔存儲,操作起來比較簡單和容易的非關系型數據庫。
d.2 你可以在MongoDB記錄中設置任何屬性的索引來實現更快的排序。
d.3 你可以通過本地u或者網絡創建數據鏡像,這使得MongoDB含有更強的擴展性。
d.4 如果負載的增加(需要更多的存儲空間和更強的處理能力),它可以分布在計算機網絡中的其它節點上,這就是所謂的分片。
d.5 MongoDB支持豐富的查詢表達式,查詢指令使用JSON形式的標記,可輕易查詢文檔中內嵌的對象和數組。 d.6 MongoDB使用update()命令可以實現替換完成的文檔(數據)或者一些指定的數據字段。 d.7 MongoDB中的Map/Reduce主要是用來對數據進行批量處理和聚合操作,Map函數調用emit(key,value)遍歷集合中所有的記錄,將key于value傳遞給Reduce函數進行處理。另外Map函數和Reduce函數是使用JavaScript編寫的,所以可以通過db.runCommand和mapreduce命令來執行MapReduce操作。 d.8 GridFS是MongoDB中的一個內置功能,可以用于存放大量小文件。
d.9 MongoDB允許在服務端執行腳本,可以用JavaScript編寫某個函數,直接在服務端執行,也可以吧函數的定義存儲在服務端,下次直接調用即可。
d.10 MongoDB支持各種編程語言:RUBY、PYTHON、JAVA、C++、PHP、C#等多種語言并且MongoDB的安裝也非常簡單
f MongoDB官網:http://www.mongodb.org/
g MongoDB學習網站:http://www.runoob.com/mongodb
一、MongoDB的安裝
下載社區版
https://www.mongodb.com/download-center#community
tar -zxvf mongodb-linux-x86_64-3.2.8.tgz
建立兩個目錄:
/u01/mongnodb/
/u01/mongodb/data/db
/u01/mongodb/logs
修改別名
vim /etc/hosts
127.0.0.1 bogon
啟動
./bin/mongod --dbpath /u01/mongodb/data/db
輸入命令lsof -i :27017,監測端口已經在使用中,所以說啟動已經完成。
二、MongoDB配置
MongoDB的啟動參數,可以在命令行指定,也可以通過配置文件
./mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/log/mongod.log --fork --auth
或者
./mongo --config=/u01/mongnodb/mongno.conf
cat /u01/mongnodb/mongno.conf
#Data file Path
#dbpath=/u01/mongodb/mongodb-linux-x86_64-rhel70-3.4.9/bin/mongod --dbpat
dbpath = /u01/mongodb/data/db
#Log file path
logpath = /u01/mongodb/mongodb-linux-x86_64-rhel70-3.4.9/logs/mongodb.log
logAppend=true
#綁定IP
#bind_ip=127.0.0.1
#port
port = 27017
# 以守護進程方式啟動
fork = true
#日志輸出方式,使用追加的方式寫日志
logappend = true
#PID File
pidfilepath=/u01/mongodb/mongodb-linux-x86_64-rhel70-3.4.9/mongodb.pid
#關閉http接口,默認關閉27018端口訪問
#nohttpinterface = true
#聲明這是一個集群分片
#shardsvr = true
#設置每個數據庫將被保存在一個單獨的目錄
#directoryperdb=true
#開啟認證
#auth = true
#設置開啟簡單的rest API ,置后打開28017網頁端口
#rest = true
##分片配置
sharding:
##指定config server
configDB: 10.96.29.2:29017,10.96.29.2:29018,10.96.29.2:29019
三、MongoDB用戶授權和管理
1、mongodb安裝好后第一次進入是不需要密碼的,也沒有任何用戶,通過shell命令可直接進入,cd到mongodb目錄下的bin文件夾,執行命令./mongo即可
# ./bin/mongo
1)顯示數據庫
> show dbs
admin 0.000GB
local 0.000GB
2)使用/創建admin的庫。權限管理就要使用admin數據庫
> use admin
switched to db admin
3)我第一次登陸時只有一個system.version表,system.users都沒有,沒關系可以建一個用戶就有了。
system.user表,這張表是用來存放超級管理員的
> show collections
system.users
system.version
4)查詢system.user表中含有數據否
> db.system.users.find()
{ "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "Fyaf2IGrGbC+kDyTZpe/tg==", "storedKey" : "Um7slisABOWPosz8h0XsxV18b68=", "serverKey" : "AwpUC8YlyvpGnncuxUaYzHKEkuw=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }
{ "_id" : "svideo.vdb", "user" : "vdb", "db" : "svideo", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "C8xTDX0YZqOxybT/2lkvgw==", "storedKey" : "9Vty4qpDso2F5793zIOoscobefk=", "serverKey" : "q8d+EwCuQcCLeTTGIAHC3djnKmw=" } }, "roles" : [ { "role" : "dbOwner", "db" : "svideo" } ] }
2、添加管理用戶(mongoDB 沒有無敵用戶root,只有能管理用戶的用戶 userAdminAnyDatabase),
db.createUser({
user:'admin',
pwd:'123456',
roles:[
{role:'userAdminAnyDatabase',db:'admin'},
{role:'dbAdminAnyDatabase',db:'admin'},
{role:'clusterMonitor',db:'admin'}
]
})
use mydb
db.createUser({
user:'vdb',
pwd:'123456',
roles:[{role:'dbOwner',db:'svideo'}]
})
角色:
userAdminAnyDatabase
dbOwner
readWrite
3、添加完管理用戶后,關閉MongoDB,并使用權限方式再次開啟MongoDB,這里注意不要使用kill直接去殺掉mongodb進程,(如果這樣做了,請去data/db目錄下刪除mongo.lock文件),可以使用db.shutdownServer()關閉
> db.shutdownServer()
2017-09-15T21:23:01.223+0800 I NETWORK [thread1] trying reconnect to 127.0.0.1:27017 (127.0.0.1) failed
2017-09-15T21:23:01.223+0800 W NETWORK [thread1] Failed to connect to 127.0.0.1:27017, in(checking socket for error after poll), reason: Connection refused
2017-09-15T21:23:01.223+0800 I NETWORK [thread1] reconnect 127.0.0.1:27017 (127.0.0.1) failed failed
server should be down...
4、添加好用戶后,就可以使用權限方式啟動MongoDB
./mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/log/mongod.log --fork --auth
或者
./mongo --config=/u01/mongnodb/mongno.conf
在mongno.conf指定參數 auth = true
5、進入mongo shell,使用admin數據庫并進行驗證,如果不驗證,是做不了任何操作的。
> use admin
> db.auth("admin","123456") #認證,返回1表示成功
6、驗證之后還是做不了操作,因為admin只有用戶管理權限,下面創建用戶,用戶都跟著庫走,
> use mydb
> db.createUser({user: "app",pwd: "123456",roles: [{ role: "readWrite", db: "mydb" }]})
7、使用創建的用戶root登錄進行數據庫操作:
mongo 127.0.0.1/mydb -uapp -p
mongo 127.0.0.1/mydb -uvdb -p
或者使用:
./mongo -u username -p password --port port --authenticationDatabase databaseName
./mongo databaseName -u username -p password --port port
然后就可以進行增刪改查各種數據操作…
Mongodb的關閉:
前臺運行:(不以守護進程方式啟動)
如果沒有使用--fork,直接可以前臺退出終端關閉。通過這種方式,Mongodb將會自己做清理退出,把沒有寫好的數據寫完成,并最終關閉數據文件。要注意的是這個過程會持續到所有操作都完成。
后臺運行:(以守護進程方式啟動 fork = true)
如果使用--fork在后臺運行mongdb服務,那么就要通過向
服務器發送shutdownServer()消息來關閉。
1、普通命令:
$ ./mongod
> use admin
> db.shutdownServer()
Mongodb啟動幫助
mongod --help
如果啟動時指定端口號了,不是默認的27017, 連接時也必須指定端口
mongo 127.0.0.1:27019
參考:
http://www.runoob.com/mongodb/mongodb-linux-install.html
MongoDB Authentication slow my TPS?
http://www.mongoing.com/archives/4623