MongoDB 安裝配置 及學(xué)習(xí)筆記

[TOC]
未完更新中...

1. MongoDB安裝及配置

  1. 官網(wǎng)下載地址
  2. 安裝msc文件,現(xiàn)在3.4的版本,有了msc,所以沒有選擇zip格式安裝包,安裝過程選擇customer,選擇安裝地址,安裝目錄盡量簡化,其他就是下一步,安裝很簡單
  3. 我的安裝目錄是 C:\MongoDB\Server,在目錄下新建名字為: "db" 的文件夾,在db目錄下,新建名為:"logs"的文件夾
  4. 在主目錄下,新建名為: "mongo.conf" 的文件,把下邊內(nèi)容黏貼并修改
  5. 修改系統(tǒng)環(huán)境變量,在"Path"系統(tǒng)環(huán)境變量里,添加 "C:\MongoDB\Server\bin",注意增加分號";"
  6. 添加為自啟動系統(tǒng)服務(wù) mongod --config C:\MongoDB\Server\mongo.conf --install --serviceName "MongoDB"
  7. win+r 打開運行 輸入 services.msc 可以查看 MongoDB服務(wù), net start MongoDB 可以開啟 net stop MongoDB 可以關(guān)閉

普通啟動 通過瀏覽器 localhost:27017 打開查看

mongod --config C:\MongoDB\Server\mongodb.conf

安裝為Windows服務(wù)
注:2.6版 這種方式在win7、win8 64位版無法安裝成功,其他系統(tǒng)未測試

mongod --config C:\MongoDB\Server\mongodb.conf --install --serviceName "MongoDB"

使用SC安裝為Windows服務(wù)

sc create MongoDB binPath= "C:\MongoDB\Server\bin\mongod.exe --service --config=D:\MongoDB\etc\mongodb.conf"

查看端口占用 netstat -ano|findstr 27017

查看進程名 tasklist |finstr 14308

殺掉進程pid taskkill /pid 14308 -t -f

mongo.conf文件內(nèi)容:

dbpath=C:\MongoDB\Server\db #數(shù)據(jù)庫路徑
logpath=C:\MongoDB\Server\db\log\mongo.log #日志輸出文件路徑
logappend=true #錯誤日志采用追加模式,配置這個選項后mongodb的日志會追加到現(xiàn)有的日志文件,而不是從新創(chuàng)建一個新文件
journal=true #啟用日志文件,默認啟用
quiet=false #這個選項可以過濾掉一些無用的日志信息,若需要調(diào)試使用請設(shè)置為false
port=27017 #端口號 默認為27017

2. 什么是MongoDB ?

  1. MongoDB 是由C++語言編寫的,是一個基于分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng)。
  2. 在高負載的情況下,添加更多的節(jié)點,可以保證服務(wù)器性能。
  3. MongoDB 旨在為WEB應(yīng)用提供可擴展的高性能數(shù)據(jù)存儲解決方案。
  4. MongoDB 將數(shù)據(jù)存儲為一個文檔,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對組成。MongoDB 文檔類似于 JSON 對象。字段值可以包含其他文檔,數(shù)組及文檔數(shù)組。

3. 主要特點

  1. MongoDB的提供了一個面向文檔存儲,操作起來比較簡單和容易。
  2. 你可以在MongoDB記錄中設(shè)置任何屬性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")來實現(xiàn)更快的排序。
  3. 你可以通過本地或者網(wǎng)絡(luò)創(chuàng)建數(shù)據(jù)鏡像,這使得MongoDB有更強的擴展性。
  4. 如果負載的增加(需要更多的存儲空間和更強的處理能力) ,它可以分布在計算機網(wǎng)絡(luò)中的其他節(jié)點上這就是所謂的分片。
  5. Mongo支持豐富的查詢表達式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內(nèi)嵌的對象及數(shù)組。
  6. MongoDb 使用update()命令可以實現(xiàn)替換完成的文檔(數(shù)據(jù))或者一些指定的數(shù)據(jù)字段 。
  7. Mongodb中的Map/reduce主要是用來對數(shù)據(jù)進行批量處理和聚合操作。
  8. Map和Reduce。Map函數(shù)調(diào)用emit(key,value)遍歷集合中所有的記錄,將key與value傳給Reduce函數(shù)進行處理。
  9. Map函數(shù)和Reduce函數(shù)是使用Javascript編寫的,并可以通過db.runCommand或mapreduce命令來執(zhí)行MapReduce操作。
  10. GridFS是MongoDB中的一個內(nèi)置功能,可以用于存放大量小文件。
  11. MongoDB允許在服務(wù)端執(zhí)行腳本,可以用Javascript編寫某個函數(shù),直接在服務(wù)端執(zhí)行,也可以把函數(shù)的定義存儲在服務(wù)端,下次直接調(diào)用即可。
  12. MongoDB支持各種編程語言:RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。
  13. MongoDB安裝簡單

4. 概念解析

sql database nosql database 數(shù)據(jù)庫
table collection 數(shù)據(jù)庫表/集合
row document 數(shù)據(jù)記錄行/文檔
column field 數(shù)據(jù)字段/域
index index 索引
table joins MongoDB不支持 表連接
primary key primary key 主鍵,MongoDB自動將_id字段設(shè)置為主鍵

5. 創(chuàng)建數(shù)據(jù)庫

  • 創(chuàng)建/使用 use info # info是數(shù)據(jù)庫名稱,以下凡是用到info的都是泛指數(shù)據(jù)庫的名稱
  • 查看 show dbs
  • 查看當(dāng)前使用 db

6. 刪除數(shù)據(jù)庫

  • 刪除數(shù)據(jù)庫 db.dropDatabase()
  • 刪除集合 db.info.drop()

6. 插入文檔

  • insert方式 db.info.insert({a:"a",b:1})
  • document方式
    • document=({a:"a",b:1})
    • db.info.insert(document)

7. 更新文檔

  • update方式 db.info.update({a:"a",b:1},{$set:{a:"b",b:1}})
  • update多條記錄方式 db.info.update({a:"a",b:1},{$set:{a:"b",b:1}},{multi:"true"})
  • save方式 db.info.save({"_id" : ObjectId("56064f89ade2f21f36b03136"), a:"b"})

更多實例

只更新第一條記錄:
db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );

全部更新:
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );

只添加第一條:
db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );

全部添加加進去:
db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );

全部更新:
db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );

只更新第一條記錄:
db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );

8. 刪除文檔

  • remove刪除多條 db.info.remove({a:1})
  • remove刪除1條 db.info.remove({a:1},1)

9. 查詢文檔

  • find方式 db.info.find()
  • find易讀方式 db.info.find().pretty()

MongoDB 與 RDBMS Where 語句比較

如果你熟悉常規(guī)的 SQL 數(shù)據(jù),通過下表可以更好的理解 MongoDB 的條件語句查詢:

操作 格式 范例 RDBMS中的類似語句
等于 {<key>:<value>} db.col.find({"by":"菜鳥教程"}).pretty() where by = '菜鳥教程'
小于 {<key>:{$lt:<value>}} db.col.find({"likes":{$lt:50}}).pretty() where likes < 50
小于或等于 {<key>:{$lte:<value>}} db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50
大于 {<key>:{$gt:<value>}} db.col.find({"likes":{$gt:50}}).pretty() where likes > 50
大于或等于 {<key>:{$gte:<value>}} db.col.find({"likes":{$gte:50}}).pretty() where likes >= 50
不等于 {<key>:{$ne:<value>}} db.col.find({"likes":{$ne:50}}).pretty() where likes != 50
  • MongoDB AND 條件
    • db.col.find({"by":"菜鳥教程", "title":"MongoDB 教程"}).pretty()
  • MongoDB OR 條件
    • db.col.find({$or:[{"by":"菜鳥教程"},{"title": "MongoDB 教程"}]}).pretty()
  • AND 和 OR 聯(lián)合使用
    • db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鳥教程"},{"title": "MongoDB 教程"}]}).pretty()

10. 條件操作符

  • 先插入測試數(shù)據(jù)三條
    db.col.insert({title:"a",likes:200})
    db.col.insert({title:"a",likes:100})
    db.col.insert({title:"a",likes:300})
  • 使用find()查找
    db.col.find({likes:{$gt:200}}) 大于
    db.col.find({likes:{$gte:200}}) 大于等于
    db.col.find({likes:{$lt:200}}) 小于
    db.col.find({likes:{$lte:200}}) 小于等于

11. $type操作符

$type操作符是基于BSON類型來檢索集合中匹配的數(shù)據(jù)類型,并返回結(jié)果。

MongoDB 中可以使用的類型如下表所示:

類型 數(shù)字 備注
Double 1
String 2
Object 3
Array 4
Binary data 5
Undefined 6 已廢棄。
Object id 7
Boolean 8
Date 9
Null 10
Regular Expression 11
JavaScript 13
Symbol 14
JavaScript (with scope) 15
32-bit integer 16
Timestamp 17
64-bit integer 18
Min key 255 Query with -1.
Max key 127
  1. 先插入測試數(shù)據(jù)三條
db.col.remove({})  # 清空數(shù)據(jù)集合
db.col.insert({title:"a",likes:200})
db.col.insert({title:1,likes:100})
db.col.insert({title:[1,2],likes:300})
  1. 使用$type查找string數(shù)據(jù)
db.col.find({title:{$type:1}})  # 1標識tuple 結(jié)果 1, [1,2] 兩條
db.col.find({title:{$type:2}})  # 2標識字符串 "a" 一條
db.col.find({title:{$type:3}})  # 4標識Array 沒有結(jié)果

12. Limit與Skip方法

db.col.find({title:"a"}).limit(1)  # 顯示1條
db.col.find({title:"a"}).limit(1).skip(1)  # 顯示1條 跳過1條

補充說明:

  1. db.col.find({},{"title":1,_id:0}).limit(2)
    • 第一個 {} 放 where 條件,為空表示返回集合中所有文檔。
    • 第二個 {} 指定那些列顯示和不顯示 (0表示不顯示 1表示顯示)
  2. 想要讀取從 10 條記錄后 100 條記錄,相當(dāng)于 sql 中l(wèi)imit (10,100)。
    • db.COLLECTION_NAME.find().skip(10).limit(100)
    • 以上實例在集合中跳過前面 10 條返回 100 條數(shù)據(jù)。
    • skip 和 limit 結(jié)合就能實現(xiàn)分頁。
  3. 當(dāng)查詢時同時使用sort,skip,limit,無論位置先后,最先執(zhí)行順序 sort再skip再limit。

13. sort排序

db.col.find().sort({like:1})  # like字段正序
db.col.find().sort({like:-1})  # like字段倒序

14. ensureIndex()索引

db.col.ensureIndex({"title":1})  # 1正序 -1倒序
db.col.ensureIndex({"title":1,"description":-1})  # 多字段索引
db.values.ensureIndex({open: 1, close: 1}, {background: true})  # background后臺創(chuàng)建

ensureIndex() 接收可選參數(shù),可選參數(shù)列表如下:

Parameter Type Description
background Boolean 建索引過程會阻塞其它數(shù)據(jù)庫操作,background可指定以后臺方式創(chuàng)建索引,即增加 "background" 可選參數(shù)。 "background" 默認值為false。
unique Boolean 建立的索引是否唯一。指定為true創(chuàng)建唯一索引。默認值為false.
name string 索引的名稱。如果未指定,MongoDB的通過連接索引的字段名和排序順序生成一個索引名稱。
dropDups Boolean 在建立唯一索引時是否刪除重復(fù)記錄,指定 true 創(chuàng)建唯一索引。默認值為 false.
sparse Boolean 對文檔中不存在的字段數(shù)據(jù)不啟用索引;這個參數(shù)需要特別注意,如果設(shè)置為true的話,在索引字段中不會查詢出不包含對應(yīng)字段的文檔.。默認值為 false.
expireAfterSeconds integer 指定一個以秒為單位的數(shù)值,完成 TTL設(shè)定,設(shè)定集合的生存時間。
v index version 索引的版本號。默認的索引版本取決于mongod創(chuàng)建索引時運行的版本。
weights document 索引權(quán)重值,數(shù)值在 1 到 99,999 之間,表示該索引相對于其他索引字段的得分權(quán)重。
default_language string 對于文本索引,該參數(shù)決定了停用詞及詞干和詞器的規(guī)則的列表。 默認為英語
language_override string 對于文本索引,該參數(shù)指定了包含在文檔中的字段名,語言覆蓋默認的language,默認值為 language.

15. 聚合

1. 插入數(shù)據(jù)
db.mycol.insert({user_name:"wy",age:2})
db.mycol.insert({user_name:"wy",age:3})
db.mycol.insert({user_name:"sg",age:4})
db.mycol.insert({user_name:"sg",age:5})
2. aggregate()計算結(jié)果如下
db.mycol.aggregate([{$group:{_id:"$user_name",num_tutorial:{$sum:"$age"}}}])
# $group 是分組顯示, _id 是分組依據(jù)字段的key,"$user_name" 是分組的具體字段,$sum 是求和, "$age" 是具體求和的字段
# 類似于 mysql: select user_name,count(age) from mycol group by user_name;
表達式 描述 實例
$sum 計算總和。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
$avg 計算平均值 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$min 獲取集合中所有文檔對應(yīng)值得最小值。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$max 獲取集合中所有文檔對應(yīng)值得最大值。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
$push 在結(jié)果文檔中插入值到一個數(shù)組中。 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet 在結(jié)果文檔中插入值到一個數(shù)組中,但不創(chuàng)建副本。 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$first 根據(jù)資源文檔的排序獲取第一個文檔數(shù)據(jù)。 db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last 根據(jù)資源文檔的排序獲取最后一個文檔數(shù)據(jù) db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])

管道的概念

管道在Unix和Linux中一般用于將當(dāng)前命令的輸出結(jié)果作為下一個命令的參數(shù)。

MongoDB的聚合管道將MongoDB文檔在一個管道處理完畢后將結(jié)果傳遞給下一個管道處理。管道操作是可以重復(fù)的。

表達式:處理輸入文檔并輸出。表達式是無狀態(tài)的,只能用于計算當(dāng)前聚合管道的文檔,不能處理其它的文檔。

這里我們介紹一下聚合框架中常用的幾個操作:

$project:修改輸入文檔的結(jié)構(gòu)??梢杂脕碇孛?、增加或刪除域,也可以用于創(chuàng)建計算結(jié)果以及嵌套文檔。
$match:用于過濾數(shù)據(jù),只輸出符合條件的文檔。$match使用MongoDB的標準查詢操作。
$limit:用來限制MongoDB聚合管道返回的文檔數(shù)。
$skip:在聚合管道中跳過指定數(shù)量的文檔,并返回余下的文檔。
$unwind:將文檔中的某一個數(shù)組類型字段拆分成多條,每條包含數(shù)組中的一個值。
$group:將集合中的文檔分組,可用于統(tǒng)計結(jié)果。
$sort:將輸入文檔排序后輸出。
$geoNear:輸出接近某一地理位置的有序文檔。

管道操作符實例

1、$project實例

db.article.aggregate(
{ $project : {
title : 1 ,
author : 1 ,
}}
);

這樣的話結(jié)果中就只還有_id,tilte和author三個字段了,默認情況下_id字段是被包含的,如果要想不包含_id話可以這樣:

db.article.aggregate(
{ $project : {
_id : 0 ,
title : 1 ,
author : 1
}});

2.$match實例

db.articles.aggregate( [
{ $match : { score : { $gt : 70, $lte : 90 } } },
{ $group: { _id: null, count: { $sum: 1 } } }
] );

$match用于獲取分數(shù)大于70小于或等于90記錄,然后將符合條件的記錄送到下一階段$group管道操作符進行處理。

3.$skip實例

db.article.aggregate(
{ $skip : 5 });

經(jīng)過$skip管道操作符處理后,前五個文檔被"過濾"掉。

筆記列表

db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])

以上實例類似sql語句:

select by_user as _id, count(*) as num_tutorial from mycol group by by_user

db.articles.aggregate({
    $project : {
        title: 2,
        by_user: 1,
    }
})

這樣子也是可行的。也就是說非0也可以進行表示顯示該字段,負數(shù)也可以表示顯示該字段。

16. MongoDB復(fù)制原理

MongoDB復(fù)制原理

mongodb的復(fù)制至少需要兩個節(jié)點。其中一個是主節(jié)點,負責(zé)處理客戶端請求,其余的都是從節(jié)點,負責(zé)復(fù)制主節(jié)點上的數(shù)據(jù)。

mongodb各個節(jié)點常見的搭配方式為:一主一從、一主多從。

主節(jié)點記錄在其上的所有操作oplog,從節(jié)點定期輪詢主節(jié)點獲取這些操作,然后對自己的數(shù)據(jù)副本執(zhí)行這些操作,從而保證從節(jié)點的數(shù)據(jù)與主節(jié)點一致。

副本集特征:

  • N 個節(jié)點的集群
  • 任何節(jié)點可作為主節(jié)點
  • 所有寫入操作都在主節(jié)點上
  • 自動故障轉(zhuǎn)移
  • 自動恢復(fù)

實例:

mongod --port 27017 --dbpath "D:\set up\mongodb\data" --replSet rs0

以上實例會啟動一個名為rs0的MongoDB實例,其端口號為27017。
啟動后打開命令提示框并連接上mongoDB服務(wù)。
在Mongo客戶端使用命令rs.initiate()來啟動一個新的副本集。
我們可以使用rs.conf()來查看副本集的配置
查看副本集狀態(tài)使用 rs.status() 命令

假設(shè)你已經(jīng)啟動了一個名為mongod1.net,端口號為27017的Mongo服務(wù)。 在客戶端命令窗口使用rs.add() 命令將其添加到副本集中,命令如下所示:

rs.add("mongod1.net:27017")

MongoDB中你只能通過主節(jié)點將Mongo服務(wù)添加到副本集中, 判斷當(dāng)前運行的Mongo服務(wù)是否為主節(jié)點可以使用命令db.isMaster() 。
MongoDB的副本集與我們常見的主從有所不同,主從在主機宕機后所有服務(wù)將停止,而副本集在主機宕機后,副本會接管主節(jié)點成為主節(jié)點,不會出現(xiàn)宕機的情況。

17. MongoDB 分片

分片

在Mongodb里面存在另一種集群,就是分片技術(shù),可以滿足MongoDB數(shù)據(jù)量大量增長的需求。

當(dāng)MongoDB存儲海量的數(shù)據(jù)時,一臺機器可能不足以存儲數(shù)據(jù),也可能不足以提供可接受的讀寫吞吐量。這時,我們就可以通過在多臺機器上分割數(shù)據(jù),使得數(shù)據(jù)庫系統(tǒng)能存儲和處理更多的數(shù)據(jù)。
為什么使用分片

復(fù)制所有的寫入操作到主節(jié)點
延遲的敏感數(shù)據(jù)會在主節(jié)點查詢
單個副本集限制在12個節(jié)點
當(dāng)請求量巨大時會出現(xiàn)內(nèi)存不足。
本地磁盤不足
垂直擴展價格昂貴

MongoDB分片

下圖展示了在MongoDB中使用分片集群結(jié)構(gòu)分布:

上圖中主要有如下所述三個主要組件:

Shard:

用于存儲實際的數(shù)據(jù)塊,實際生產(chǎn)環(huán)境中一個shard server角色可由幾臺機器組個一個replica set承擔(dān),防止主機單點故障

Config Server:

mongod實例,存儲了整個 ClusterMetadata,其中包括 chunk信息。

Query Routers:

前端路由,客戶端由此接入,且讓整個集群看上去像單一數(shù)據(jù)庫,前端應(yīng)用可以透明使用。

分片實例

分片結(jié)構(gòu)端口分布如下:

Shard Server 1:27020
Shard Server 2:27021
Shard Server 3:27022
Shard Server 4:27023
Config Server :27100
Route Process:40000

步驟一:啟動Shard Server

[root@100 /]# mkdir -p /www/mongoDB/shard/s0
[root@100 /]# mkdir -p /www/mongoDB/shard/s1
[root@100 /]# mkdir -p /www/mongoDB/shard/s2
[root@100 /]# mkdir -p /www/mongoDB/shard/s3
[root@100 /]# mkdir -p /www/mongoDB/shard/log
[root@100 /]# /usr/local/mongoDB/bin/mongod --port 27020 --dbpath=/www/mongoDB/shard/s0 --logpath=/www/mongoDB/shard/log/s0.log --logappend --fork
....
[root@100 /]# /usr/local/mongoDB/bin/mongod --port 27023 --dbpath=/www/mongoDB/shard/s3 --logpath=/www/mongoDB/shard/log/s3.log --logappend --fork

步驟二: 啟動Config Server

[root@100 /]# mkdir -p /www/mongoDB/shard/config
[root@100 /]# /usr/local/mongoDB/bin/mongod --port 27100 --dbpath=/www/mongoDB/shard/config --logpath=/www/mongoDB/shard/log/config.log --logappend --fork

注意:這里我們完全可以像啟動普通mongodb服務(wù)一樣啟動,不需要添加—shardsvr和configsvr參數(shù)。因為這兩個參數(shù)的作用就是改變啟動端口的,所以我們自行指定了端口就可以。

步驟三: 啟動Route Process

/usr/local/mongoDB/bin/mongos --port 40000 --configdb localhost:27100 --fork --logpath=/www/mongoDB/shard/log/route.log --chunkSize 500

mongos啟動參數(shù)中,chunkSize這一項是用來指定chunk的大小的,單位是MB,默認大小為200MB.

步驟四: 配置Sharding

接下來,我們使用MongoDB Shell登錄到mongos,添加Shard節(jié)點

[root@100 shard]# /usr/local/mongoDB/bin/mongo admin --port 40000
MongoDB shell version: 2.0.7
connecting to: 127.0.0.1:40000/admin
mongos> db.runCommand({ addshard:"localhost:27020" })
{ "shardAdded" : "shard0000", "ok" : 1 }
......
mongos> db.runCommand({ addshard:"localhost:27029" })
{ "shardAdded" : "shard0009", "ok" : 1 }
mongos> db.runCommand({ enablesharding:"test" }) #設(shè)置分片存儲的數(shù)據(jù)庫
{ "ok" : 1 }
mongos> db.runCommand({ shardcollection: "test.log", key: { id:1,time:1}})
{ "collectionsharded" : "test.log", "ok" : 1 }

步驟五: 程序代碼內(nèi)無需太大更改,直接按照連接普通的mongo數(shù)據(jù)庫那樣,將數(shù)據(jù)庫連接接入接口40000

18. MongoDB 備份(mongodump)與恢復(fù)(mongorestore)

MongoDB數(shù)據(jù)備份

在Mongodb中我們使用mongodump命令來備份MongoDB數(shù)據(jù)。該命令可以導(dǎo)出所有數(shù)據(jù)到指定目錄中。

mongodump命令可以通過參數(shù)指定導(dǎo)出的數(shù)據(jù)量級轉(zhuǎn)存的服務(wù)器。
語法

mongodump命令腳本語法如下:

mongodump -h dbhost -d dbname -o dbdirectory

-h:

MongDB所在服務(wù)器地址,例如:127.0.0.1,當(dāng)然也可以指定端口號:127.0.0.1:27017
-d:

需要備份的數(shù)據(jù)庫實例,例如:test
-o:

備份的數(shù)據(jù)存放位置,例如:c:\data\dump,當(dāng)然該目錄需要提前建立,在備份完成后,系統(tǒng)自動在dump目錄下建立一個test目錄,這個目錄里面存放該數(shù)據(jù)庫實例的備份數(shù)據(jù)。 

實例

在本地使用 27017 啟動你的mongod服務(wù)。打開命令提示符窗口,進入MongoDB安裝目錄的bin目錄輸入命令mongodump:

>mongodump

執(zhí)行以上命令后,客戶端會連接到ip為 127.0.0.1 端口號為 27017 的MongoDB服務(wù)上,并備份所有數(shù)據(jù)到 bin/dump/ 目錄中。命令輸出結(jié)果如下:

MongoDB數(shù)據(jù)備份

mongodump 命令可選參數(shù)列表如下所示:
語法  描述  實例
mongodump --host HOST_NAME --port PORT_NUMBER   該命令將備份所有MongoDB數(shù)據(jù)   mongodump --host w3cschool.cc --port 27017
mongodump --dbpath DB_PATH --out BACKUP_DIRECTORY       mongodump --dbpath /data/db/ --out /data/backup/
mongodump --collection COLLECTION --db DB_NAME  該命令將備份指定數(shù)據(jù)庫的集合。 mongodump --collection mycol --db test
MongoDB數(shù)據(jù)恢復(fù)

mongodb使用 mongorestore 命令來恢復(fù)備份的數(shù)據(jù)。
語法

mongorestore命令腳本語法如下:

mongorestore -h <hostname><:port> -d dbname <path>

--host <:port>, -h <:port>:

MongoDB所在服務(wù)器地址,默認為: localhost:27017
--db , -d :

需要恢復(fù)的數(shù)據(jù)庫實例,例如:test,當(dāng)然這個名稱也可以和備份時候的不一樣,比如test2
--drop:

恢復(fù)的時候,先刪除當(dāng)前數(shù)據(jù),然后恢復(fù)備份的數(shù)據(jù)。就是說,恢復(fù)后,備份后添加修改的數(shù)據(jù)都會被刪除,慎用哦!
<path>:

mongorestore 最后的一個參數(shù),設(shè)置備份數(shù)據(jù)所在位置,例如:c:\data\dump\test。

你不能同時指定 <path> 和 --dir 選項,--dir也可以設(shè)置備份目錄。
--dir:

指定備份的目錄

你不能同時指定 <path> 和 --dir 選項。

接下來我們執(zhí)行以下命令:

>mongorestore

執(zhí)行以上命令輸出結(jié)果如下:

MongoDB數(shù)據(jù)恢復(fù)

19. MongoDB 監(jiān)控

在你已經(jīng)安裝部署并允許MongoDB服務(wù)后,你必須要了解MongoDB的運行情況,并查看MongoDB的性能。這樣在大流量得情況下可以很好的應(yīng)對并保證MongoDB正常運作。

MongoDB中提供了mongostat 和 mongotop 兩個命令來監(jiān)控MongoDB的運行情況。
mongostat 命令

mongostat是mongodb自帶的狀態(tài)檢測工具,在命令行下使用。它會間隔固定時間獲取mongodb的當(dāng)前運行狀態(tài),并輸出。如果你發(fā)現(xiàn)數(shù)據(jù)庫突然變慢或者有其他問題的話,你第一手的操作就考慮采用mongostat來查看mongo的狀態(tài)。

啟動你的Mongod服務(wù),進入到你安裝的MongoDB目錄下的bin目錄, 然后輸入mongostat命令,如下所示:

D:\set up\mongodb\bin>mongostat

以上命令輸出結(jié)果如下:
mongotop 命令

mongotop也是mongodb下的一個內(nèi)置工具,mongotop提供了一個方法,用來跟蹤一個MongoDB的實例,查看哪些大量的時間花費在讀取和寫入數(shù)據(jù)。 mongotop提供每個集合的水平的統(tǒng)計數(shù)據(jù)。默認情況下,mongotop返回值的每一秒。

啟動你的Mongod服務(wù),進入到你安裝的MongoDB目錄下的bin目錄, 然后輸入mongotop命令,如下所示:

D:\set up\mongodb\bin>mongotop

以上命令執(zhí)行輸出結(jié)果如下:

帶參數(shù)實例

E:\mongodb-win32-x86_64-2.2.1\bin>mongotop 10

后面的10是<sleeptime>參數(shù) ,可以不使用,等待的時間長度,以秒為單位,mongotop等待調(diào)用之間。通過的默認mongotop返回數(shù)據(jù)的每一秒。

E:\mongodb-win32-x86_64-2.2.1\bin>mongotop --locks

報告每個數(shù)據(jù)庫的鎖的使用中,使用mongotop - 鎖,這將產(chǎn)生以下輸出:

輸出結(jié)果字段說明:

ns:

包含數(shù)據(jù)庫命名空間,后者結(jié)合了數(shù)據(jù)庫名稱和集合。

db:

包含數(shù)據(jù)庫的名稱。名為 . 的數(shù)據(jù)庫針對全局鎖定,而非特定數(shù)據(jù)庫。

total:

mongod花費的時間工作在這個命名空間提供總額。

read:

提供了大量的時間,這mongod花費在執(zhí)行讀操作,在此命名空間。

write:

提供這個命名空間進行寫操作,這mongod花了大量的時間。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、MongoDB簡介 1.概述 ? MongoDB是一個基于分布式文件存儲的數(shù)據(jù)庫,由C++語言編寫。旨在為WE...
    鄭元吉閱讀 1,130評論 0 2
  • 客戶端https://robomongo.org/ 連接mongodb://[username:password@...
    加勒比兔Z閱讀 388評論 0 0
  • MongoDB文檔 MongoDB 概念解析 不管我們學(xué)習(xí)什么數(shù)據(jù)庫都應(yīng)該學(xué)習(xí)其中的基礎(chǔ)概念,在mongodb中基...
    birdflying閱讀 2,073評論 0 27
  • MongoDB簡介 MongoDB 是一個基于分布式文件存儲的數(shù)據(jù)庫。由 C++ 語言編寫。旨在為 WEB 應(yīng)用提...
    奮斗的小鳥GO閱讀 788評論 0 4
  • 從前 雪會沒過腳脖子 白花花 晃的睜不開眼 沙沙掃雪聲 驚醒了清晨 父親在院里院外 揮舞著掃帚 如翻弄著一堆堆棉花...
    一團菌閱讀 283評論 8 5

友情鏈接更多精彩內(nèi)容