Mongodb 介紹
文檔型數據庫
C++語言編寫,分佈式文件存儲的開源數據庫系統,屬於NoSQL
在高負載的情況下,可以添加更多的節點,保證服務器的性能
爲WEB應用提供可擴展的高性能數據存儲解決方案。
將數據存儲爲一個文檔,數據結構由鍵值對組成,MongoDB文檔類似於JSON對象。字段值可以包含其他文檔,數組以及文檔數組。
從3.2開始默認使用WiredTiger storage engine.
NoSQL MongoDB安裝
vim /etc/yum.repos.d/mongodb-org-3.4.repo [mongodb-org-3.4] name=MongoDB Repository baseurl= gpgcheck=1 enabled=1 gpgkey= yum install -y mongodb-org #sed -i "s%bindIp: 127.0.0.1%#bindIp: 127.0.0.1%g" /etc/mongod.conf 監聽所有的IP,監聽多個192.168.1.1,192.168.1.2 使用逗號隔開
卸載
yum erase $(rpm -qa | grep mongodb-org) rm -r /var/log/mongodb rm -r /var/lib/mongo
進入mongo shell時 提示
關於讀寫的認證部分(第一個警告),warning 暫時未解決,按照官方文檔操作亦有此問題。
修改內核
echo never >/sys/kernel/mm/transparent_hugepage/enabled echo never >/sys/kernel/mm/transparent_hugepage/defrag systemctl start mongod.service chkconfig mongod on 設置開機啓動
無法啓動時 可以使用 mongodb -f /etc/mongodb.conf 來啓動 ,可以查看錯誤
Mongodb 連接和用戶管理
mongo 進入到mongodb shell中 (--port 指定端口 默認的端口27017)
連接遠程主機 mongo --host 127.0.0.1
mongo -uusername -ppasswd
用戶管理(針對庫),建立用戶時要先進入到對應的庫裏
use test (切換庫,沒有自動創建)
db //顯示所在的數據庫
db.createUser({user:"admin",pwd:"123456",roles:[{role:'dbOwner',db:'userdb'}]})
use admin
db.system.users.find() //必須在admin庫裏 才能找到所有用戶,列出所有用戶,需要切換到admin庫
show users; //查看當前庫的所有用戶
db.dropUser('admin') //刪除用戶
MongoDB庫管理
db.version() //查看版本號
use test (切換庫,沒有自動創建)
show dbs //查看庫,此時userdb並沒有出現,這是因爲該庫是空的,還沒有任何集合,只需要創建一個集合就能看到了
db.createCollection('clo1') //創建集合clo1,在當前庫下面創建
db.dropDatabase() //刪除當前庫,必須切換到庫下再刪除
db.stats() //查看當前庫信息
db.serverStatus()
db.createCollection('clo1',{capped:true,autoIndexID:true,size:6142800,max:10000})
capped:true 啓用封頂集合,固定大小的集合,到達最大值時,自動覆蓋最早的條目。如果爲true,需要指定尺寸大小。
,autoIndexID:true 自動創建索引 _id字段的默認是false
size 指定最大字節的封頂集合,單位 B
max 指定封頂集合允許在文件的最大數量。
show collections //查看所有集合 可以用 show tables
db.clo1.insert({clo1ID:1,UserName:"123",password:"123456"}) //如果集合不存在,自動創建集合
db.Account.find() //查看Account的所有文檔
db.Account.find({AccountID:2}) //查看AccountID的內容
db.clo1.update({clo1ID:1},{"$set":{"Age":20}})
db.clo1.remove({clo1ID:1}) //根據條件刪除
db.clo1.drop() //刪除所有文檔,即刪除組合
db.printCollectionStats() //查看集合狀態
MongoDB副本集(repl set)
副本集,這種模式下有一個主(primary),多個從(secondary),只讀。支持給他們設置權重,當主宕掉後,權重最高的從切換爲主(備用的權重需要比其他的高)。此架構中,可以建立一個仲裁的角色,只負責裁決,而不存儲數據(也是一個Mongodb的數據庫),讀寫數據都在主上,要實現負載均衡的目標需要手動指定讀庫目標server。
修改配置文件 /etc/mongod.conf
replication:
test01
mongod
use admin
> config={_id:"test01",members:[{_id:0,host:"192.168.1.88:27017"},{_id:1,host:"192.168.1.89:27017"},{_id:2,host:"192.168.1.90:27017"}]}
> rs.initiate(config) //查看狀態rs.status() 可能不需要執行下面步驟
> rs.add("192.168.1.89")
> rs.add("192.168.1.90")
> rs.status() 查看狀態
如果兩個從上的狀態 爲 “stateStr”:"STARTUP",則需要如下操作:
> var config={_id:"test01",members:[{_id:0,host:"192.168.1.88:27017"},{_id:1,host:"192.168.1.89:27017"},{_id:2,host:"192.168.1.90:27017"}]}
> rs.reconfig(config)
再次查看rs.status()狀態 SECONDARY
權重設置:默認三臺權重都是1,如果任何一臺的權重設置比其他的高,則該機器馬上切換爲primary角色,所以 88:3 89:2 90:1
在主上執行
cfg=rs.conf()
cfg.members[0].priority = 3
cfg.members[1].priority = 2
cfg.members[2].priority = 1
rs.reconfig(cfg) //89節點會成爲候選主節點
MongoDB備份與恢復
備份庫
mongodump -h ip -d dbname -o dir //-h 後面跟服務ip -p port -d database 名字 ,不加則備份所有的數據庫, -o 備份的目錄
備份指定的集合
mongodump -d mydb -c testc -o /tmp/test //-c 指定集合的名字
導出集合爲json文件
mongoexport -d mydb -c testc -o /tmp/testc.json //-o後面跟的是文件的名字
恢復所有的庫
mongorestore --drop /tmp/123 //--drop 刪除原庫 然後在恢復 /tmp/123 備份所有庫目錄的名字
恢復指定的庫
mongorestore -d mydb dir/ //-d 要恢復庫的名字 dir 該庫備份時所在的目錄
恢復集合
mongorestore -d mydb -c test dir/mydb/testc.bson //-c需要恢復的集合的名字 dir 備份時的路徑 需要指定要恢復的bson文件
導入集合
mongoimport -d mydb -c testc --file /tmp/testc.json
歡迎打算使用阿里雲服務器的小夥伴,加我私聊!!QQ:3533470970 或直接領取阿里雲幸運券:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=b6h928qb&utm_source=b6h928qb