一.Mongodb的簡單介紹
NoSQL簡介
NoSQL(Not Only SQL ),意即“不僅僅是SQL” ,指的是非關係型的數據庫 。是一項全新的數據庫革命性運動,早期就有人提出,發展至2009年趨勢越發高漲。NoSQL的擁護者們提倡運用非關係型的數據存儲,相對於鋪天蓋地的關係型數據庫運用,這一概念無疑是一種全新的思維的注入。
關係型數據庫中的表都是存儲一些結構化的數據,每條記錄的字段的組成都一樣,即使不是每條記錄都需要所有的字段,但數據庫會爲每條數據分配所有的字段。而非關係型數據庫以鍵值對(key-value)存儲,它的結構不固定,每一條記錄可以有不一樣的鍵,每條記錄可以根據需要增加一些自己的鍵值對,這樣就不會侷限於固定的結構,可以減少一些時間和空間的開銷。
NoSql數據庫優缺點
在優勢方面主要體現在下面幾點:- 簡單的擴展
快速的讀寫
低廉的成本
靈活的數據模型
在不足方面主要有下面幾點:
不提供對SQL的支持
支持的特性不夠豐富
現有的產品不夠成熟
MongoDB簡介
MongoDB是用C++語言編寫的非關係型數據庫。特點是高性能、易部署、易使用,存儲數據十分方便,主要特性有:
面向集合存儲,易於存儲對象類型的數據
模式自由
支持動態查詢
支持完全索引,包含內部對象
支持複製和故障恢復
使用高效的二進制數據存儲,包括大型對象
文件存儲格式爲BSON(一種JSON的擴展)
MongoDB基本概念
文檔(document)是MongoDB中數據的基本單元,非常類似於關係型數據庫系統中的行(但是比行要複雜的多)。
集合(collection)就是一組文檔,如果說MongoDB中的文檔類似於關係型數據庫中的行,那麼集合就如同表。
MongoDB的單個計算機可以容納多個獨立的數據庫,每一個數據庫都有自己的集合和權限。
MongoDB自帶簡潔但功能強大的JavaScript shell,這個工具對於管理MongoDB實例和操作數據作用非常大。
每一個文檔都有一個特殊的鍵”_id”,它在文檔所處的集合中是唯一的,相當於關係數據庫中的表的主鍵。
二.mongodb的安裝和配置
安裝環境centos7
1.下載包
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.12.tgz
2、解壓tar -zxvf mongodb-linux-x86_64-3.2.12.tgz
3、移動到指定位置mv mongodb-linux-x86_64-3.2.12/ /usr/local/mongodb
4、在/usr/local/mongodb下創建文件夾
存放數據 mkdir /data
存放日誌mkdir /logs
5、在/usr/local/mongodb/bin下新建配置vi mongodb.conf
dbpath = /usr/local/mongodb/data/db #數據文件存放目錄
logpath = /usr/local/mongodb/logs/mongodb.log #日誌文件存放目錄
port = 27017 #端口
fork = true #以守護程序的方式啓用,即在後臺運行
bind_ip =127.0.0.1 #綁定ip
verbose = vvvvv 日誌級別,可以寫1個v,最多5個v,v越多越詳細
mongod 爲服務端
mongo 爲客戶端
6、環境變量配置vim /etc/profile
export MONGODB_HOME=/usr/local/mongodb
export PATH=$PATH:$MONGODB_HOME/bin
保存後,重啓系統配置source /etc/profile
7、啓動在/usr/local/mongodb/bin下mongod -f mongodb.conf 或 ./mongod -f mongodb.conf
啓動後查看
8、關閉mongod -f ./mongodb.conf --shutdown 或./mongod -f ./mongodb.conf --shutdown
9..連接使用mongod
客戶端連接mongod服務,出現警告,安裝時最好不要用root用戶安裝,
使用admin用戶退出,並查看退出日誌
三.mongodb的基本使用增刪改查
1.創建庫和表
表是一個集合,裏面的數據是json格式的,前面的id是全局id,是不重複的
2.數據的查找
find()
使用for循環插入多條數據
count()查詢數量
條件查詢,skip跳過前三條,查詢2個,按id排序
注:
在查詢的後面加上explain(),可以顯示查詢的詳細參數,包括索引,時間等信息
3.數據更新
update()
更新多個字段數據的其中一個
複製一條空數據,有時候會出現還是空數據
後面加上true,如果是空自動插入一條數據
4.更新多條數據
這樣只能更新一條
使用{$set:{c:2}},false,true即可
5.刪除數據
刪除爲了安全,必須給參數
刪除表
四.mongostat工具
實時採集
參數介紹
inserts 每秒插入數量
query 每秒查詢數量
update 每秒更新數量
delete 每秒刪除數量
getmore 查詢大數據的時候不能一次顯示完,每次獲取以後更多的數據
command 執行命令的數量
flushes 每秒虛擬映射的次數,每次內存數據刷到硬盤上
vsize 佔據內存大小
res
qr | qw 讀隊列和寫隊列,重要
ar | aw 當前客戶端活躍的數量
netIn 輸入流量
netOut 輸出流量
conn 當前的連接數量
五.mongoDB相關安全設置
1.創建用戶
角色類型:內建類型(read,readWrite,dbAdmin,dbOwner,userAdmin)
添加管理用戶(mongoDB 沒有無敵用戶root,只有能管理用戶的用戶 userAdminAnyDatabase)
注:添加完用戶後可以使用show users或db.system.users.find()查看已有用戶
use mydb
db.system.users.remove({user:"root"})
db.system.users.find()
2、添加完管理用戶後,關閉MongoDB,並使用權限方式再次開啓MongoDB,這裏注意不要使用kill直接去殺掉mongodb進程,(如果這樣做了,請去data/db目錄下刪除mongo.lock文件),可以使用db.shutdownServer()關閉
謹記:先在不開啓認證的情況下,創建用戶,之後關閉服務,然後再開啓認證,才生效。
開啓權限認證
vim mongodb.conf
auth = true
重新啓動
[root@server1 bin]# mongo 127.0.0.1:27017
查看日誌,認證開啓
3.進入mongo shell,使用admin數據庫並進行驗證,如果不驗證,是做不了任何操作的。驗證之後還是做不了操作,因爲admin只有用戶管理權限,下面創建student用戶,用戶都跟着庫走。
[root@server1 bin]# mongo 127.0.0.1:27017
4.使用創建的用戶student登錄進行數據庫操作
5、刪除用戶
db.dropUser("user") 刪除指定用戶
db.dropAllUsers() 刪除當前數據下所有用戶
六.mongodb的備份恢復
1、MongoDB數據庫備份
mongodump -h dbhost -d dbname -o dbdirectory
參數說明:
-h: MongDB所在服務器地址,例如:127.0.0.1,當然也可以指定端口號:127.0.0.1:27017
-d: 需要備份的數據庫實例,例如:test
-o: 備份的數據存放位置,例如:/home/mongodump/,當然該目錄需要提前建立,這個目錄裏面存放該數據庫實例的備份數據。
實例:
備份mydb庫
刪除testdb表
2、MongoDB數據庫恢復
mongorestore -h dbhost -d dbname --dir dbdirectory
參數或名:
h: MongoDB所在服務器地址
d: 需要恢復的數據庫實例,例如:test,當然這個名稱也可以和備份時候的不一樣,比如test2
-dir: 備份數據所在位置,例如:/home/mongodump/itcast/
-drop: 恢復的時候,先刪除當前數據,然後恢復備份的數據。就是說,恢復後,備份後添加修改的數據都會被刪除,慎用!