您好,登錄后才能下訂單哦!
Mongodb 是由c++編寫的基于分布式文件存儲的開源數據庫系統,介于關系數據庫和非關系數據庫之間,支持查詢語言很強大。高負載情況下,添加多個節點保證服務器性能,旨在為web應用提供可擴展的高性能存儲;mongodb將數據存儲為一個文檔,由鍵值對(key=>value)組成,類似json對象。
官網:https://www.mongodb.com/
應用:
CERN,著名的粒子物理研究所,歐洲核子研究中心大型強子對撞機的數據使用MongoDB;
Craiglist,上使用MongoDB的存檔數十億條記錄;
Shutterfly,以互聯網為基礎的社會和個人出版服務,使用MongoDB的各種持久性數據存儲的要求;
Intuit公司,一個為小企業和個人的軟件和服務提供商,為小型企業使用MongoDB的跟蹤用戶的數據;
mongodb 安 裝
www.apelearn.com/bbs/data/download/mongodb-org-3.0.tar.gz //rpm包,大家 可以用
官方提供的源只支持64位系統,安裝的epel擴展源,可以安裝mongodb2.4版本,此次我們安裝3.0版本
vim /etc/yum.repos.d/mongodb-org-3.0.repo //加入如下內容
[mongodb-org-3.0]
name=MongoDB Repository
baseurl=http://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.0/x86_64/
gpgcheck=0
enabled=1
安裝:yum install -y mongodb-org
編輯:vim /etc/mongod.conf
fork: true
pidFilePath: /var/run/mongodb/mongod.pid
bind_ip: 192.168.1.1,192.168.1.2,192.168.1.3 # 留空的話表示監聽所有
注:把這兩行后面#開頭的注釋刪掉,否則重啟的時候會有問題
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
vim /etc/security/limits.conf //加入
mongod soft nofile 64000
mongod hard nofile 64000
mongod soft nproc 32000
mongod hard nproc 32000
啟動:service mongod start # 啟動的過程會比較慢,這是它在寫數據 /var/lib/mongo
啟動失敗的話,可用下面方式啟動:mongod -f /etc/mongod.conf
mongodb 的 使 用
mongodb 連接:
mongo //直接進入mongo的shell
mongo --port 27018 //指定監聽端口進入
mongo --host 127.0.0.1 //連接遠程mongo
mongo -uusername -ppasswd //設置驗證時指定用戶名密碼,和mysql類似
mongodb 用戶管理:
use admin //切換到admin庫下,admin和test是默認自帶的倆庫
use teng12 //切換到teng12庫,不存在會自動創建
show users //查看當前庫下所有的用戶
db.system.users.find() //列出所有用戶,需要切換到admin庫
db.createUser({user:"admin",pwd:"123456",roles:[{role:'dbOwner',db:'userdb'}]}) //創建用戶
db.dropUser('admin') //刪除用戶
用戶角色:http://bbs.51cto.com/thread-1146654-1.html
mongodb 庫管理:
db.stats() //查看當前庫的信息
db.version() //查看版本
show teng12 //查看庫,該庫是空的所以無userdb,創建個集合就可看到
db.createCollection('clo1') //創建集合clo1,在當前庫下面創建
db.dropDatabase() //刪除當前庫,要想刪除某個庫,必須切換到那個庫下
db.serverStatus() //查看mongodb服務器的狀態
mongodb 集合:
db.createCollection("mycol", { capped : true, autoIndexID : true, size : 6142800, max : 10000 } )
//語法:db.createCollection(name,options)
name:集合的名字。options可選,用來配置集合的參數,參數如下
autoindexID true/false (可選)如果為true,自動創建索引_id字段的默認值是false;
capped true/false (可選)如果為true,則啟用封頂集合。達其最大值就會覆蓋最早條目;
size (可選)指定最大大小字節封頂集合。封頂如果是 true,那么你還需要指定這個字段。單位B
max (可選)指定封頂集合允許在文件的最大數量
mongodb 數據管理:
db.Account.insert({AccountID:1,UserName:"123",password:"123456"}) //創建集合
db.Account.update({AccountID:1},{"$set":{"Age":20}}) //更新
show collections //查看集合,或者使用show tables
db.Account.find() //查看所有文檔
db.Account.drop() //刪除所有文檔,即刪除集合
db.printCollectionStats() // 然后查看集合狀態
db.Account.find({AccountID:1}) //根據條件查詢
db.Account.remove({AccountID:1}) //根據條件刪除
副 本 集
早期版本使用一主一從,類似mysql,但slave在此架構為只讀,主宕機后,從無法自動切為換主;
目前已由主從改為副本集,為一主(primary)多從(secondary,只讀),支持以權重切換從為主,此架構中可建立一個仲裁(arbiter)角色,只負責裁決,不存儲數據,此架構中讀寫數據都在主上,若實現負載均衡需要手動指定從庫的目標server。
primary | secondary | secondary |
192.168.1.1 | 192.168.1.2 | 192.168.1.3 |
編輯:vim /etc/mongod.conf # 之后重啟三臺機器
replication: ##oplog大小 oplogSizeMB: 20 ##復制集名稱 replSetName: teng
連接主,在主上運行命令mongo
> use admin
> config={_id:"teng",members:[{_id:0,host:"192.168.1.1:27017"},{_id:1,host:"192.168.1.2:27017"},{_id:2,host:"192.168.1.3:27017"}]}
> rs.initiate(config)
> rs.add("192.168.1.2")
> rs.add("192.168.1.3")
rs.status() //查看狀態
如果兩個從上的狀態為"stateStr" : "STARTUP", 則需要進行如下操作
> var config=config={_id:"teng",members:[{_id:0,host:"192.168.1.1:27017"},{_id:1,host:"192.168.1.2:27017"},{_id:2,host:"192.168.1.3:27017"}]}
> rs.reconfig(config)
此時再次查看rs.status()會發現從的狀態變為SECONDARY
主上建庫,建集合
> use mydb
> db.acc.insert({AccountID:1,UserName:"123",password:"123456"})
> show dbs
從上查看
> show dbs
若出現錯誤Error: listDatabases failed:{ "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" },需要執行
> rs.slaveok()
更改權重模仿主宕機:
默認三臺機器權重都為1,如果任何一個權重設置為比其他的高,則該臺機器馬上切換為primary角色,所以我們預設三臺機器的權重分別為:1:3,2:2,3:1
在主上執行
cfg = rs.conf()
cfg.members[0].priority = 3
cfg.members[1].priority = 2
cfg.members[2].priority = 1
rs.reconfig(cfg)
這樣的話,第二個節點將會成為候選主節點。
主上執行:iptables -I INPUT -p tcp --dport 27017 -j DROP
mongodb 備 份 恢 復
備份指定庫:mongodump -h ip -d dbname -o dir //-o后指定備份到哪里,它是一個目錄
備份所有庫:mongodump -h ip -o dir //不加數據庫dbname,則備份所有庫
備份指定集合:mongodump -d mydb -c testc -o /tmp/testc //-c指定集合名字
導出指定集合:mongoexport -d mydb -c testc -o /tmp/testc.json //-o后面跟的是一個文件名字
恢復指定庫:mongorestore -d mydb dir/ //-d 恢復庫的名字,dir就是該庫備份時所在的目錄
恢復所有庫:mongorestore --drop dir/ //--drop可選,指恢復之前刪除之前數據,不建議使用
恢復集合:mongorestore -d mydb -c testc dir/mydb/testc.bson // -c 集合名,bson文件的路徑
導入集合:mongoimport -d mydb -c testc --file /tmp/testc.json
-------------------------------------------------------------------------------------------------
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。