mongodb 配置文件解釋(轉)

   Mongodb 3.x配置說明,本文內容忽略了Enterprise版和一些不經常使用的配置。javascript

1、配置說明java

    在Mongod安裝包中,包含2個進程啓動文件:mongod和mongos;其中mongd是核心基礎進程,用來接收讀寫請求、負責存儲實際數據,mongod實例是構成集羣的基本單位,好比Replication set、Sharding Cluster、Config Servers等;mongos是Sharding Cluster架構模式中的「路由」進程,即客戶端請求訪問mongos,而後有mongos將請求轉發給合適的sharding server執行操做,並將result返回給客戶端,因此mongos基本不存儲數據,只是在內存中緩存部分shard key與sharding server的對應關係,便於路由。linux

 

    在配置文件方面,mongod和mongos有不少相同之處,下文中若有區別之處將會特別指出。算法

    在一個節點上,一般同時啓動mongod和mongos進程是正常的,他們之間不存在資源競爭,可是爲了不衝突,咱們但願它們使用各自的配置文件,好比mongod.conf、mongos.conf;mongodb的某些平臺下的安裝包中沒有自帶配置文件,須要開發者本身建立。mongodb

 

    重要配置參數講解以下:shell

 

一、processManagement:數據庫

    fork: <true | false>json

    描述:是否以fork模式運行mongod/mongos進程,默認爲false。後端

 

    pidFilePath:<路徑>緩存

    描述:配合"fork:true"參數,將mongod/mongos進程ID寫入指定的文件,若是不指定,將不會建立PID文件。

二、net:

    bindIp: <127.0.0.1>

    描述:mongod/monogs進程綁定的IP,application經過此IP、port創建連接。能夠綁定在任意網卡接口上,若是你的mongos/mongod只須要內網訪問,能夠綁定在內網IP(例如:192.168.1.100),若是須要外網訪問,那麼則綁定外網IP,若是此值爲「0.0.0.0」,則綁定到全部接口即內網、外網IP都可以訪問。(不建議)能夠綁定都多個ip上,ip地址之間用「,」分割。

 

    port: 27017

    描述:mongod/mongos偵聽端口,默認爲27017;不過由於mongodb有2種典型的架構模式:replica set和sharding,若是開發者在一個節點上部署多個mongod實例,須要注意修改此端口以免衝突。

 

    maxIncomingConnections: 65536

    描述:mongod/mongos進程容許的最大鏈接數,若是此值超過操做系統配置的鏈接數閥值,將不會生效(ulimit);默認值爲65536。一般客戶端將會使用鏈接池機制,能夠有效的控制每一個客戶端的連接個數。

 

    wireObjectCheck: true

    描述:當客戶端寫入數據時,mongos/mongod是否檢測數據的有效性(BSON),若是數據格式不良,此insert、update操做將會被拒絕;默認值爲true

 

    ipv6: false

    描述:是否支持mongos/mongod多個實例之間使用IPV6網絡,默認值爲false。此值須要在整個cluster中保持一致。

 

三、storage:

    dbPath: db

    描述:mongod進程存儲數據目錄,此配置僅對mongod進程有效。默認值爲:/data/db。

 

    indexBuildRetry: true

    描述:當構建索引時mongod意外關閉,那麼再次啓動是否從新構建索引;索引構建失敗,mongod重啓後將會刪除還沒有完成的索引,可是否重建由此參數決定。默認值爲true。

 

    repairPath: _tmp

    描述:配合--repair啓動命令參數,在repair期間使用此目錄存儲臨時數據,repair結束後此目錄下數據將被刪除,此配置僅對mongod進程有效。不建議在配置文件中配置,而是使用mongod啓動命令指定。

 

    engine: mmapv1

    描述:存儲引擎類型,mongodb 3.0以後支持「mmapv1」、「wiredTiger」兩種引擎,默認值爲「mmapv1」;官方宣稱wiredTiger引擎更加優秀。

 

    journal:

        enabled: true

        描述:是否開啓journal日誌持久存儲,journal日誌用來數據恢復,是mongod最基礎的特性,一般用於故障恢復。64位系統默認爲true,32位默認爲false,建議開啓,僅對mongod進程有效。

 

    directoryPerDB: false

    描述:是否將不一樣DB的數據存儲在不一樣的目錄中,dbPath的子目錄,目錄名爲db的名稱。對已經存儲數據的mongod修改此值,須要首先使用mongodump指令將數據導出,而後關閉mongod,再修改此值和指定新的dbPath,而後使用mongorestore指令從新導入數據。(即導出數據,並使用mongorestore將數據從新寫入mongod的新目錄中)

    對於replica set架構模式,只須要在每一個secondary依次操做:關閉secondary,而後配置新的dbPath,而後啓動便可(會執行初始化sync,從primary中將數據去徹底同步到本地)。最後操做primary。

    此參數僅對mongod進程有效,默認值爲false,不建議修改此值

 

    syncPeriodSecs: 60

    描述:mongod使用fsync操做將數據flush到磁盤的時間間隔,默認值爲60(單位:秒),強烈建議不要修改此值;mongod將變動的數據寫入journal後再寫入內存,並間歇性的將內存數據flush到磁盤中,即延遲寫入磁盤,有效提高磁盤效率。此指令不影響journal存儲,僅對mongod有效。

 

 

    mmapv1:(以下配置僅對MMAPV1引擎生效)

        quota:

            enforced: false

            描述:配額管理,是否限制每一個DB所能持有的最大文件數量,僅對mongod有效,默認值爲false,建議保持默認值。

            maxFilesPerDB: 8

            描述:若是enforce開啓,每一個DB所持有的存儲文件不會超過此閥值。僅對mongod進程有效。

 

        smallFiles: false

        描述:是否使用小文件存儲數據;若是此值爲true,mongod將會限定每一個數據文件的大小爲512M(默認最大爲2G),journal下降到128M(默認爲1G)。若是DB的數據量較大,將會致使每一個DB建立大量的小文件,這對性能有必定的影響。在production環境下,不建議修改此值,在測試時能夠設置爲true,節約磁盤。

 

        journal:

            commitIntervalMs: 100

            描述:mongod進程提交journal日誌的時間間隔,即fsync的間隔。考慮到磁盤效能,mongod間歇性的flush日誌數據;此值越小,數據丟失的可能性越低,磁盤消耗越大,性能越低。若是但願write操做強制當即寫入journal,能夠傳遞參數選項「j:true」(在客戶端write操做中指定此選項便可),此操做(包括此前還沒有提交的)將會當即fsync到磁盤。僅對mongod有效,單位:毫秒

        nsSize: 每一個database的namespace文件的大小,默認爲16,單位:M;最大值能夠設置爲2048,即dbpath下「.ns」後綴文件的大小。16M基本上能夠保存24000條命名條目,新建一個collection或者index信息,即會增長一個namespace條目;若是你的database下須要建立大量的collection(好比數據分析),則能夠適度調大此值。

 

 

    wiredTiger:(以下配置僅對wiredTiger引擎生效(3.0以上版本)

        engineConfig:

            cacheSizeGB: 8

            描述:wiredTiger緩存工做集(working set)數據的內存大小,單位:GB,此值決定了wiredTiger與mmapv1的內存模型不一樣,它能夠限制mongod對內存的使用量,而mmapv1則不能(依賴於系統級的mmap)。默認狀況下,cacheSizeGB的值爲假定當前節點只部署一個mongod實例,此值的大小爲物理內存的一半;若是當前節點部署了多個mongod進程,那麼須要合理配置此值。若是mongod部署在虛擬容器中(好比,lxc,cgroups,Docker)等,它將不能使用整個系統的物理內存,則須要適當調整此值。默認值爲物理內存的一半。

 

            journalCompressor: snappy

            描述:journal日誌的壓縮算法,可選值爲「none」、「snappy」、「zlib」。

            directoryForIndexes: false

            描述:是否將索引和collections數據分別存儲在dbPath單獨的目錄中。即index數據保存「index」子目錄,collections數據保存在「collection」子目錄。默認值爲false,僅對mongod有效。

 

        collectionConfig:

             blockCompressor: snappy

             描述:collection數據壓縮算法,可選值「none」、「snappy」、「zlib」。開發者在建立collection時能夠指定值,以覆蓋此配置項。若是mongod中已經存在數據,修改此值不會帶來問題,舊數據仍然使用原來的算法解壓,新數據文件將會採用新的解壓縮算法。

 

        indexConfig:

            prefixCompression: true

            描述:是否對索引數據使用「前綴壓縮」(prefix compression,一種算法)。前綴壓縮,對那些通過排序的值存儲,有很大幫助,能夠有效的減小索引數據的內存使用量。默認值爲true。

 

四、operationProfiling:

    slowOpThresholdMs: 100

    描述:數據庫profiler斷定一個操做是「慢查詢」的時間閥值,單位毫秒;mongod將會把慢查詢記錄到日誌中,即便profiler被關閉。當profiler開啓時,慢查詢記錄還會被寫入「system.profile」這個系統級的collection中。請參看mongod profiler相關文檔。默認值爲100,此值只對mongod進程有效。

   

    mode: off

    描述:數據庫profiler級別,操做的性能信息將會被寫入日誌文件中,可選值:

    1)off:關閉profiling

    2)slowOp:on,只包含慢操做日誌

    3)all:on,記錄全部操做

    數據庫profiling會影響性能,建議只在性能調試階段開啓。此參數僅對mongod有效。

 

 

五、replication:(複製集架構模式配置,若是隻是單點,則無需配置)

    oplogSizeMB: 10240

    描述:replication操做日誌的最大尺寸,單位:MB。mongod進程根據磁盤最大可用空間來建立oplog,好比64位系統,oplog爲磁盤可用空間的5%,一旦mongod建立了oplog文件,此後再次修改oplogSizeMB將不會生效。此值不要設置的過小, 應該足以保存24小時的操做日誌,以保證secondary有充足的維護時間;若是過小,secondary將不能經過oplog來同步數據,只能全量同步。此值僅對mongod有效。

 

    enableMajorityReadConcern: false

    描述:是否開啓readConcern的級別爲「majority」,默認爲false;只有開啓此選項,才能在read操做中使用「majority」。(3.2+版本)

 

    replSetName: <無默認值>

    描述:「複製集」的名稱,複製集中的全部mongd實例都必須有相同的名字,sharding分佈式下,不一樣的sharding應該使用不一樣的replSetName。僅對mongod有效。

 

    secondaryIndexPrefetch: all

    描述:只對mmapv1存儲引擎有效。複製集中的secondary,從oplog中運用變動操做以前,將會先把索引加載到內存中,默認狀況下,secondaries首先將操做相關的索引加載到內存,而後再根據oplog應用操做。可選值:

    1)none:secondaries不將索引數據加載到內容

    2)all:sencondaries將此操做有關的索引數據加載到內存

    3)_id_only:只加載_id索引

    默認值爲:all,此配置僅對mongod有效。

 

    localPingThresholdMs: 15

    描述:ping時間,單位:毫秒,mongos用來斷定將客戶端read請求發給哪一個secondary。僅對mongos有效。默認值爲15,和客戶端driver中的默認值同樣。當mongos接收到客戶端read請求,它將:

    一、找出複製集中ping值最小的member。

    二、將延遲值被此值容許的members,構建一個列表

    三、從列表中隨機選擇一個member。

    ping值是動態值,每10秒計算一次。mongos將客戶端請求轉發給延遲較小(與此值相比)的某個secondary節點。僅對mongos有效。

 

 

六、sharding:(僅對sharding架構模式下有效)

    clusterRole: <無默認值>

    描述:在sharding集羣中,此mongod實例的角色,可選值:

    一、configsvr:此實例爲config server,此實例默認偵聽27019端口

    二、shardsvr:此實例爲shard(分片),偵聽27018端口

    此配置僅對mongod有效。一般config server和sharding server須要使用各自的配置文件。

 

    archiveMovedChunks: true

    描述:當chunks由於「負載平衡」而遷移到其餘節點時,mongod是否將這些chunks歸檔,並保存在dbPath下「moveChunk」目錄下,mongod不會刪除moveChunk下的文件。默認爲true。

 

    autoSplit: true

    描述:是否開啓sharded collections的自動分裂,僅對mongos有效。若是全部的mongos都設定爲false,那麼collections數據增加但不能分裂成新的chunks。由於集羣中任何一個mongos進程均可以觸發split,因此此值須要在全部mongos行保持一致。僅對mongos有效。

 

    configDB: <無默認值>

    描述:設定config server的地址列表,每一個server地址之間以「,」分割,一般sharded集羣中指定1或者3個config server。(生產環境,一般是3個config server,但1個也是能夠的)。全部的mongos實例必須配置同樣,不然可能帶來沒必要要的問題。僅對mongos有效

 

    chunkSize: 64

    描述:sharded集羣中每一個chunk的大小,單位:MB,默認爲64,此值對於絕大多數應用而言都是比較理想的。chunkSize太大會致使分佈不均,過小會致使分裂成大量的chunk而常常移動

##整個sharding集羣中,此值須要保持一致,集羣啓動後修改此值將再也不生效。僅對mongos有效

 

七、sytemsLog:(系統日誌,必須配置)

    verbosity: 0

    描述:日誌級別,0:默認值,包含「info」信息,1~5,即大於0的值均會包含debug信息

    

    quiet: true

    描述:"安靜",此時mongod/mongos將會嘗試減小日誌的輸出量。不建議在production環境下開啓,不然將會致使跟蹤錯誤比較困難。

    

    traceAllExceptions: true

    描述:打印異常詳細信息。

    

    path:  logs/mongod.log

    

    logAppend: false

    描述:若是爲true,當mongod/mongos重啓後,將在現有日誌的尾部繼續添加日誌。不然,將會備份當前日誌文件,而後建立一個新的日誌文件;默認爲false。

 

    logRotate: rename

    描述:日誌「迴轉」,防止一個日誌文件特別大,則使用logRotate指令將文件「迴轉」,可選值:

    1)rename:重命名日誌文件,默認值。

    2)reopen:使用linux日誌rotate特性,關閉並從新打開此日誌文件,能夠避免日誌丟失,可是logAppend必須爲true。

 

    destination: file

    描述:日誌輸出目的地,能夠指定爲「 file」或者「syslog」,表述輸出到日誌文件,若是不指定,則會輸出到標準輸出中(standard output)。

 

八、與安全有關的配置(摘要介紹)

Java代碼   收藏代碼
  1. security:  
  2.     authorization: enabled  
  3.     clusterAuthMode: keyFile  
  4.     keyFile: /srv/mongodb/keyfile  
  5.     javascriptEnabled: true  
  6. setParameter:   
  7.     enableLocalhostAuthBypass: true  
  8.     authenticationMechanisms: SCRAM-SHA-1  

 

    1)authorization:disabled或者enabled,僅對mongod有效;表示是否開啓用戶訪問控制(Access Control),即客戶端能夠經過用戶名和密碼認證的方式訪問系統的數據,默認爲「disabled」,即客戶端不須要密碼便可訪問數據庫數據。(限定客戶端與mongod、mongos的認證)

 

    2)clusterAuthMode:集羣中members之間的認證模式,可選值爲「keyFile」、「sendKeyFile」、「sendX509」、「x509」,對mongod/mongos有效;默認值爲「keyFile」,mongodb官方推薦使用x509,不過我我的以爲仍是keyFile比較易於學習和使用。不過3.0版本中,mongodb增長了對TLS/SSL的支持,若是能夠的話,建議使用SSL相關的配置來認證集羣的member,此文將再也不介紹。(限定集羣中members之間的認證)

 

    3)keyFile:當clusterAuthMode爲「keyFile」時,此參數指定keyfile的位置,mongodb須要有訪問此文件的權限。

 

    4)javascriptEnabled:true或者false,默認爲true,僅對mongod有效;表示是否關閉server端的javascript功能,就是是否容許mongod上執行javascript腳本,若是爲false,那麼mapreduce、group命令等將沒法使用,由於它們須要在mongod上執行javascript腳本方法。若是你的應用中沒有mapreduce等操做的需求,爲了安全起見,能夠關閉javascript。

 

    「setParameter」容許指定一些的Server端參數,這些參數不依賴於存儲引擎和交互機制,只是微調系統的運行狀態,好比「認證機制」、「線程池參數」等。參見【parameter

    1)enableLocalhostAuthBypass:true或者false,默認爲true,對mongod/mongos有效;表示是否開啓「localhost exception」,對於sharding cluster而言,咱們傾向於在mongos上開啓,在shard節點的mongod上關閉。

 

    2)authenticationMechanisms:認證機制,可選值爲「SCRAM-SHA-1」、「MONGODB-CR」、「PLAN」等,建議爲「SCRAM-SHA-1」,對mongod/mongos有效;一旦選定了認證機制,客戶端訪問databases時須要與其匹配纔能有效。

 

九、與性能有關的參數

Java代碼   收藏代碼
  1. setParameter:  
  2.     connPoolMaxShardedConnsPerHost: 200  
  3.     connPoolMaxConnsPerHost: 200  
  4.     notablescan: 0  

 

    1)connPoolMaxShardedConnsPerHost:默認值爲200,對mongod/mongos有效;表示當前mongos或者shard與集羣中其餘shards連接的連接池的最大容量,此值咱們一般不會調整。鏈接池的容量不會阻止建立新的連接,可是從鏈接池中獲取連接的個數不會超過此值。維護鏈接池須要必定的開支,保持一個連接也須要佔用必定的系統資源。

    2)connPoolMaxConnsPerHost:默認值爲200,對mongod/mongos有效;同上,表示mongos或者mongod與其餘mongod實例之間的鏈接池的容量,根據host限定。

 

2、配置樣例

    mongodb 3.0以後配置文件採用YAML格式,這種格式很是簡單,使用<key>:<value>表示,開頭使用「空格」做爲縮進。須要注意的是,「:」以後有value的話,須要緊跟一個空格,若是key只是表示層級,則無需在「:」後增長空格(好比:systemLog:後面既不須要空格)。按照層級,每行4個空格縮進,第二級則8個空格,依次輪推,頂層則不須要空格縮進。若是格式不正確,將會出現以下錯誤:

 

Java代碼   收藏代碼
  1. Error parsing YAML config file: yaml-cpp: error at line 3, column 1: illegal tab when looking for indentation  
  2. Error parsing YAML config file: yaml-cpp: error at line 15, column 12: illegal map value  

  

    一、mongod.conf  

Java代碼   收藏代碼
  1. systemLog:  
  2.     quiet: false  
  3.     path: /data/mongodb/logs/mongod.log  
  4.     logAppend: false  
  5.     destination: file  
  6. processManagement:  
  7.     fork: true  
  8.     pidFilePath: /data/mongodb/mongod.pid  
  9. net:  
  10.     bindIp: 127.0.0.1  
  11.     port: 27017  
  12.     maxIncomingConnections: 65536  
  13.     wireObjectCheck: true  
  14.     ipv6: false   
  15. storage:  
  16.     dbPath: /data/mongodb/db  
  17.     indexBuildRetry: true  
  18.     journal:  
  19.         enabled: true  
  20.     directoryPerDB: false  
  21.     engine: mmapv1  
  22.     syncPeriodSecs: 60   
  23.     mmapv1:  
  24.         quota:  
  25.             enforced: false  
  26.             maxFilesPerDB: 8  
  27.         smallFiles: true      
  28.         journal:  
  29.             commitIntervalMs: 100  
  30.     wiredTiger:  
  31.         engineConfig:  
  32.             cacheSizeGB: 8  
  33.             journalCompressor: snappy  
  34.             directoryForIndexes: false    
  35.         collectionConfig:  
  36.             blockCompressor: snappy  
  37.         indexConfig:  
  38.             prefixCompression: true  
  39. operationProfiling:  
  40.     slowOpThresholdMs: 100  
  41.     mode: off  

 

    若是你的架構模式爲replication Set,那麼還須要在全部的「複製集」members上增長以下配置: 

Java代碼   收藏代碼
  1. replication:  
  2.     oplogSizeMB: 10240  
  3.     replSetName: rs0  
  4.     secondaryIndexPrefetch: all  

 

    若是爲sharding Cluster架構,則須要在shard節點增長以下配置:  

Java代碼   收藏代碼
  1. sharding:  
  2.     clusterRole: shardsvr  
  3.     archiveMovedChunks: true  

    固然,一個mongod實例便可覺得「複製集」的member之一,也能夠做爲sharding集羣中的一個分片,這取決你的架構模式。

 

    mongod進程能夠作爲「config server」實例,只須要將「clusterRole: configsvr」便可;因而可知,一個mongod實例能夠爲「單點實例」、「config server」、「sharding server」 + 「replication set member」其中一個角色,建議使用不一樣的配置文件啓動它。

 

    二、mongos.conf 

Java代碼   收藏代碼
  1. systemLog:  
  2.     quiet: false  
  3.     path: /data/mongodb/logs/mongod.log  
  4.     logAppend: false  
  5.     destination: file  
  6. processManagement:  
  7.     fork: true  
  8.     pidFilePath: /data/mongodb/mongod.pid  
  9. net:  
  10.     bindIp: 127.0.0.1  
  11.     port: 37017  
  12.     maxIncomingConnections: 65536  
  13.     wireObjectCheck: true  
  14.     ipv6: false   
  15. replication:  
  16.     localPingThresholdMs: 15              
  17. sharding:  
  18.     autoSplit: true  
  19.     configDB: m1.com:27018,m2.com:27018,m3.com:27018  
  20.     chunkSize: 64  

 

    mongos實例不須要存儲實際的數據,對內存有必定的消耗,在sharding架構模式下使用;mongos需接收向客戶端請求(後端的sharded和replication set則不須要讓客戶端知道),它能夠將客戶端請求轉發到一個分片集羣上(分片集羣基於複製集)延遲相對較小的secondary上,同時還負責chunk的分裂和遷移工做。

  

3、其餘

    一、啓動與關閉    

    配置文件中絕大部分參數,均可以經過進程啓動命令指定,一般啓動命令行中的參數將覆蓋配置文件中的參數。

Java代碼   收藏代碼
  1. ./mongod -f mongod.conf  

     固然,也能夠經過使用多個命令行參數來啓動,以下僅爲示例:

Java代碼   收藏代碼
  1. ./mongod --bind_ip 127.0.0.1 --port 27017 --dbpath /data/mongodb/db --logpath /data/mongodb/logs --storageEngine mmapv1 --fork  

     mongod配置中所指定的目錄地址必須首先建立,不然將沒法啓動,這有別與其餘系統。

 

    mongos啓動方式同上。若是但願基於service方式啓動mongod、mongos,請參考其餘文檔。

    能夠經過kill指令來關閉mongod進程,不過這種方式有些粗暴,在production環境中可能會致使數據損壞,建議使用mongo shell來「cleanly」關閉mongod進程,這種方式安全並且不會致使數據損壞。

Java代碼   收藏代碼
  1. ./mongo  
  2. > use admin;  
  3. > db.shutdownServer();  

 

    可使用「kill <mongod process ID>」的方式關閉,這種方式也是「cleanly」;若是使用「kill -9 」方式就是強制線程退出,可能會致使數據丟失。若是在非fork下運行mongod,直接在shell上使用「CTRL-C」方式也是「cleanly」退出。對於線上環境,最好不要「kill -9」。 

 

    二、repair

    「修復」數據庫,當mongodb運行一段時間以後,特別是通過大量刪除、update操做以後,咱們可使用repair指令對數據存儲進行「repair」,它將整理、壓縮底層數據存儲文件,重用磁盤空間,至關於數據從新整理了一遍,對數據優化有必定的做用。

    若是mongod沒有開啓journaling日誌功能,repair指令能夠在系統異常crash以後,用於整理數據、消除損壞數據;若是開啓了journaling日誌功能,咱們則需不要使用repair來修復數據,由於journal就能夠幫助mongod恢復數據。在replication set模式下,可使用repair,可是一般能夠直接刪除舊數據,使用「數據同步」操做,便可達到「恢復」、「整理」數據的目的,效果和repair同樣,並且效率更高。

    repair須要磁盤有必定的剩餘空間,爲當前database數據量 + 2GB,能夠經過使用「--repairpath」來指定repair期間存儲臨時數據的目錄。repair指令還會重建indexes,能夠下降索引的數據大小。

    若是mongod意外crash,須要首先正常啓動mongod,讓根據journal日誌恢復完數據以後,才能執行repair;若是journal日誌有數據還沒有恢復,那麼使用repair指令啓動mongod將會失敗。

    repair時須要關閉mongod進程,執行完畢後再啓動。

Java代碼   收藏代碼
  1. ./mongod --dbpath=/data/mongodb/db --repair  

 

     mongodb比較傾向於使用shell來repair特定的database,這個操做相對比較可控,其內部工做機制同樣。

 

Java代碼   收藏代碼
  1. >./mongo  
  2. >user mydatabase;  
  3. >db.repairDatabase();  

 

    三、mongodump與mongorestore

    咱們一般會使用到mongodb數據的備份功能,或者將一個備份導入到一個新的mongod實例中(數據冷處理),那麼就須要藉助這兩個指令。

    mongodump將整個databases所有內容導出到一個二進制文件中,能夠在其餘mongod使用mongorestore來加載整個文件。須要注意mongodump不會導出「local」數據庫中的數據,固然這個local庫對恢復數據也沒有太大意義。

    「-u」參數指定訪問database的用戶名,「-p」指定密碼,「--host」和「--port」指定mongod實例的位置,「--db」指定須要dump的數據庫,若是不指定則dump全部數據庫,「--collection」指定須要dump的集合表,若是不指定則dumpl整個db下的全部collections;「--query <json>」指定dump時的查詢條件,「--out」指定結果輸出文件的路徑:

Java代碼   收藏代碼
  1. >./mongodump --host m1.com --port 27017 -u root -p pass --out /data/mongodb/backup/dump_2015_10_10  

 

     mongorestore則將dump的數據文件導入到database,mongorestore能夠建立新的database或者將數據添加到現有的database中。若是將數據restore到已經存在的database中,mongorestore僅執行insert,不會執行update,若是數據庫中已經存在相同的「_id」數據,mongorestore不會覆蓋原有的document。mongorestore會從新建立indexes,全部的操做都是insert而不會update。

    基本指令相似於mongodump,「--db」指定須要將數據restore到哪一個db中,若是此db不存在,則建立;若是沒有指定「--db」,mongorestore則根據原始數據所屬的db從新建立,這可能會致使數據覆蓋。「--drop」表示在restore數據以前,首先刪除目標db中原有的collections,--drop不會刪除那些在dump文件中沒有的collection。「--stopOnError」表示出錯時強制退出。

Java代碼   收藏代碼
  1. ./mongorestore --db mydatabase /data/mongodb/backup/dump_2015_10_10  

 

    四、mongoimport和mongoexport

    mongoexport將數據導出爲JSON或者CSV格式,以便其餘應用程序解析。

    由於mongodb數據是BSON格式,有些數據類型是JSON不具備的,因此導出JSON格式會仍然會丟失數據類型;因此若是導出的數據是準備給其餘mongodb恢復數據,那麼建議使用mongodump和mongorestore。

    命令參數同3)

    五、mongostat指令能夠間歇性的打印出當前mongod實例中「數據存儲」、「flush」、讀寫次數、網絡輸出等參數,是查看mongod性能的有效手段。mongotop能夠根據查看各個database下讀寫狀況。

 

    更多關於mongodb的運維操做,稍後介紹。

 

    六、mongo shell操做簡述

    1)help:列出全部的function

    2)show dbs:展現當前實例中全部的databases。

    3)use <dbname>:切換到指定的db,接下來的操做將會在此db中。

    4)show collections:展現出當前db中全部的collections。

    5)show users:展現當前db中已經添加的全部用戶。

    6)show roles:展現當前db中全部內置的或者自定義的用戶角色。

    7)show profile:這涉及到profile相關的配置,默認狀況下展現出最近5個操做耗時超過1秒的操做,一般用於跟蹤慢查詢。

    8)db.help():展現出能夠在db上進行的操做function。

    9)db.<collection>.help():展現出能夠在colleciton上進行的操做。

相關文章
相關標籤/搜索