MongoDB -- 介紹、安裝、庫管理、備份以及恢復

                                 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時 提示

wKioL1jFcsDDiR6zAAK-9iKwiSU256.png-wh_50


關於讀寫的認證部分(第一個警告),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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章