啟動MongoDB有2種方式吗冤,一是直接指定配置參數(shù),二是指定配置文件馋没。這里介紹的是配置文件,啟動方式如下:
mongod --config /etc/mongodb.conf
配置參數(shù)如下:
dbpath:數(shù)據(jù)存放目錄婆排。默認: word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: #ffffff; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">/data/db/
dbpath=/var/lib/mongodb
port:端口段只。默認27017鉴扫,
#使用
port = 27017
MongoDB的默認服務(wù)TCP端口坪创,監(jiān)聽客戶端連接莱预。要是端口設(shè)置小于1024,比如1021涯贞,則需要root權(quán)限啟動宋渔,不能用mongodb帳號啟動(普通帳號即使是27017也起不來),否則報錯:
[mongo --port=1021 連接]
ERROR: listen(): bind() failed errno:13 Permission denied for socket: 127.0.0.1:1021
logappend:寫日志的模式:設(shè)置為true為追加皇拣。默認是覆蓋审磁。如果未指定此設(shè)置,啟動時MongoDB的將覆蓋現(xiàn)有的日志文件杭措。
logappend=true
pidfilepath:進程ID钾恢,沒有指定則啟動時候就沒有PID文件瘩蚪。默認缺省。
pidfilepath = /var/run/mongo.pid
fork:是否后臺運行崩哩,設(shè)置為true 啟動 進程在后臺運行的守護進程模式邓嘹。默認false汹押。
fork = true
auth:用戶認證棚贾,默認false榆综。不需要認證奖年。當設(shè)置為true時候陋守,進入數(shù)據(jù)庫需要auth驗證,當數(shù)據(jù)庫里沒有用戶猩系,則不需要驗證也可以操作寇甸。直到創(chuàng)建了第一個用戶,之后操作都需要驗證吟秩。
auth = true
具體使用見這里 MongoDB 基礎(chǔ) -安全性-(權(quán)限操作)
verbose:日志信息冗余涵防。默認false壮池。提高內(nèi)部報告標準輸出或記錄到logpath配置的日志文件中椰憋。要啟用verbose或啟用verbosity 用vvvv參數(shù)赔退,如:
#使用
verbose = true
vvvv = true
啟動verbose冗長信息离钝,它的級別有 vv~vvvvv弱睦,v越多級別越高,在日志文件中記錄的信息越詳細。
bind_ip:綁定地址碘橘。默認127.0.0.1痘拆,只能通過本地連接纺蛆。進程綁定和監(jiān)聽來自這個地址上的應(yīng)用連接桥氏。要是需要給其他服務(wù)器連接字支,則需要注釋掉這個或則把IP改成本機地址,如192.168.200.201[其他服務(wù)器用 mongo --host=192.168.200.201 連接] 揖庄,可以用一個逗號分隔的列表綁定多個IP地址蹄梢。
bind_ip = 127.0.0.1,127.0.0.2
maxConns:最大連接數(shù)检号。默認值:取決于系統(tǒng)(即的ulimit和文件描述符)限制,3.x以后,默認的參數(shù)是1000000個鏈接蛙酪。MongoDB中不會限制其自身的連接桂塞。當設(shè)置大于系統(tǒng)的限制阁危,則無效,以系統(tǒng)限制為準擂煞。這對于客戶端創(chuàng)建很多“表”对省,允許連接超時而不關(guān)閉“表”的時候很有用蒿涎。設(shè)置該值的高于連接池和總連接數(shù)的大小劳秋,以防止尖峰時候的連接胖齐。注意:不能設(shè)置該值大于20000市怎。
maxConns = 100
objcheck:強制驗證客戶端請求区匠。2.4的默認設(shè)置為objcheck成為true帅腌,在早期版本objcheck默認為false速客。因為它強制驗證客戶端請求溺职,確崩嗽牛客戶端絕不插入無效文件到數(shù)據(jù)庫中七冲。對于嵌套文檔的對象澜躺,會有一點性能影響抒蚜。設(shè)置noobjcheck 關(guān)閉嗡髓。
objcheck = true
#noobjcheck = false
noobjcheck:同上饿这,默認關(guān)閉false。
#noobjcheck = false
logpath:指定日志文件,該文件將保存所有的日志記錄唆姐、診斷信息奉芦。除非另有指定剧蹂,mongod將所有的日志信息輸出到標準輸出宠叼。如果沒有指定logappend,重啟則日志會進行覆蓋操作伸蚯。
logpath=/var/log/mongodb/mongodb.log
logappend:寫日志的模式:設(shè)置為true為追加剂邮。默認是覆蓋挥萌。如果未指定此設(shè)置,啟動時MongoDB的將覆蓋現(xiàn)有的日志文件狂芋。
logappend=true
syslog:日志輸出都發(fā)送到主機的syslog系統(tǒng)银酗,而不是標準輸出到logpath指定日志文件黍特。syslog和logpath不能一起用灭衷,會報錯:
Cant use both a logpath and syslog
syslog = true
pidfilepath:進程ID翔曲,沒有指定則啟動時候就沒有PID文件瞳遍。默認缺省菌羽。
pidfilepath = /var/run/mongo.pid
keyFile:指定存儲身份驗證信息的密鑰文件的路徑。默認缺省猾蒂。詳情見:"Replica Set Security" and “Replica Set Administration.”
keyFile = /srv/mongodb/keyfile
nounixsocket:套接字文件肚菠,默認為false蚊逢,有生成socket文件。當設(shè)置為true時怒医,不會生成socket文件稚叹。
nounixsocket = false
unixSocketPrefix:套接字文件路徑扒袖,默認/tmp
unixSocketPrefix = /tmp
noauth:禁止用戶認證季率,默認true飒泻。同上
noauth = true
cpu:設(shè)置為true會強制mongodb每4s報告cpu利用率和io等待泞遗,把日志信息寫到標準輸出或日志文件史辙。默認為false佩伤。
cpu = true
開啟日志會出現(xiàn):
Mon Jun 10 10:21:42.241 [snapshotthread] cpu: elapsed:4000 writelock: 0%
diaglog:創(chuàng)建一個非常詳細的故障排除和各種錯誤的診斷日志記錄生巡。默認0孤荣。設(shè)置為1,為在dbpath目錄里生成一個diaglog.開頭的日志文件,他的值如下:
Value | Setting |
---|---|
off. No logging. | #關(guān)閉遂庄。沒有記錄涛目。 |
Log write operations. | #寫操作 |
Log read operations. | #讀操作 |
Log both read and write operations. | #讀寫操作 |
Log write and some read operations. | #寫和一些讀操作 |
設(shè)置不等于0,日志會每分鐘flush 一次:
Mon Jun 10 11:16:17.504 [DataFileSync] flushing diag log
Mon Jun 10 11:17:17.442 [DataFileSync] flushing diag log
產(chǎn)生的日志可以用mongosniff 來查看:要是mongosniff[類似于tcpdump的作為一個MongoDB的特定的TCP/ IP網(wǎng)絡(luò)流量]出現(xiàn)報錯和具體用法估蹄,請見這里臭蚁,之前先執(zhí)行:apt-get install libpcap-dev
root@m3:/var/lib/mongodb# mongosniff --source DIAGLOG diaglog.51b542a9
注意:當重新設(shè)置成0垮兑,會停止寫入文件系枪,但mongod還是繼續(xù)保持打開該文件私爷,即使它不再寫入數(shù)據(jù)文件衬浑。如果你想重命名割疾,移動或刪除診斷日志,你必須完全關(guān)閉mongod實例拓诸。
diaglog = 3
directoryperdb:設(shè)置為true麻昼,修改數(shù)據(jù)目錄存儲模式,每個數(shù)據(jù)庫的文件存儲在DBPATH指定目錄的不同的文件夾中倍谜。使用此選項叉抡,可以配置的MongoDB將數(shù)據(jù)存儲在不同的磁盤設(shè)備上褥民,以提高寫入吞吐量或磁盤容量。默認為false载弄。
注意:要是在運行一段時間的數(shù)據(jù)庫中,開啟該參數(shù)惫叛,會導(dǎo)致原始的數(shù)據(jù)都會消失(注釋參數(shù)則會回來)嘉涌。因為數(shù)據(jù)目錄都不同了亲桥,除非遷移現(xiàn)有的數(shù)據(jù)文件到directoryperdb產(chǎn)生的數(shù)據(jù)庫目錄中题篷,如:
root@m3:/var/lib/mongodb# mv test.* test/
把test數(shù)據(jù)文件遷移到directoryperdb產(chǎn)生的數(shù)據(jù)庫test目錄中番枚。 所以需要在規(guī)劃好之后確定是否要開啟。
directoryperdb = ture
- 原始數(shù)據(jù)結(jié)構(gòu):
- journal
- mongod.lock
- local.0
- local.1
- local.ns
- test.0
- test.1
- test.ns
- 開啟 directoryperdb深啤,并把數(shù)據(jù)文件遷移到相關(guān)的數(shù)據(jù)目錄后的結(jié)構(gòu):
- journal
- mongod.lock
- local/local.0
- local/local.1
- local/local.ns
- test/test.0
- test/test.1
- test/test.ns
journal:日志溯街,(redo log呈昔,更多的介紹請看這里和這里)
默認值:(在64位系統(tǒng))true友绝。
默認值:(32位系統(tǒng))false迁客。
設(shè)置為true掷漱,啟用操作日志,以確保寫入持久性和數(shù)據(jù)的一致性育特,會在dbpath目錄下創(chuàng)建journal目錄缰冤。
設(shè)置為false棉浸,以防止日志持久性的情況下迷郑,并不需要開銷嗡害。為了減少磁盤上使用的日志的影響霸妹,您可以啟用nojournal知押,并設(shè)置為true台盯。
注意:在64位系統(tǒng)上禁用日志必須使用帶有nojournal的静盅。
#journal=true
journal=false
32位OS:
1.Tue Jun 11 12:17:09.628 [initandlisten] ** NOTE: This is a 32 bit MongoDB binary.
2.Tue Jun 11 12:17:09.628 [initandlisten] ** 32 bit builds are limited to less than 2GB of data (or less with --journal).
64位OS:
1.Tue Jun 11 12:29:34 [initandlisten] journal dir=/var/lib/mongodb/journal
2.Tue Jun 11 12:29:34 [initandlisten] recover : no journal files present, no recovery needed
nojournal:禁止日志
默認值:(在64位系統(tǒng))false蒿叠。
默認值:(32位系統(tǒng))true栈虚。
設(shè)置nojournal為true關(guān)閉日志,64位魂务,2.0版本后的mongodb默認是啟用 journal日志粘姜。
nojournal=true
journalCommitInterval:刷寫提交機制孤紧,默認是30ms或則100ms。較低的值躺酒,會更消耗磁盤的性能蔑歌。
此選項接受2和300毫秒之間的值:
如果單塊設(shè)備提供日志和數(shù)據(jù)文件次屠,默認的日記提交時間間隔為100毫秒裸违。
如果不同的塊設(shè)備提供的日志和數(shù)據(jù)文件本昏,默認的日記提交的時間間隔為30毫秒凛俱。
journalCommitInterval=100
ipv6:是否支持ipv6蒲犬,默認false。
jsonp:是否允許JSONP訪問通過一個HTTP接口赫编,默認false擂送。
nohttpinterface:是否禁止http接口,即28017 端口開啟的服務(wù)境氢。默認false萍聊,支持。
nohttpinterface = false
noprealloc:預(yù)分配方式此衅。
默認false:使用預(yù)分配方式來保證寫入性能的穩(wěn)定骑歹,預(yù)分配在后臺進行墨微,并且每個預(yù)分配的文件都用0進行填充欢嘿。這會讓MongoDB始終保持額外的空間和空余的數(shù)據(jù)文件炼蹦,從而避免了數(shù)據(jù)增長過快而帶來的分配磁盤空間引起的阻塞掐隐。
設(shè)置noprealloc= true來禁用預(yù)分配的數(shù)據(jù)文件虑省,會縮短啟動時間探颈,但在正常操作過程中,可能會導(dǎo)致性能顯著下降怀大。
noprealloc = false
noscripting:是否禁止腳本引擎化借。默認是false:不禁止蓖康。ture:禁止
要是設(shè)置成true:運行一些腳本的時候會出現(xiàn):
JavaScript execution failed: group command failed: { "ok" : 0, "errmsg" : "server-side JavaScript execution is disabled" }
#noscripting = true
noscripting = false
notablescan:是否禁止表掃描操作钓瞭。默認false:不禁止山涡,ture:禁止
禁止要是執(zhí)行表掃描會出現(xiàn):
error: { "$err" : "table scans not allowed:test.emp", "code" : 10111 }
可以動態(tài)修改設(shè)置:
db.adminCommand({setParameter:1, notablescan:false})
#notablescan = true
notablescan = false
nssize:命名空間的文件(即NS)的默認大小竞穷,默認16M瘾带,最大2G看政。
所有新創(chuàng)建的默認大小命名空間的文件(即NS)允蚣。此選項不會影響現(xiàn)有的命名空間的文件的大小嚷兔。默認值是16M字節(jié)冒晰,最大大小為2 GB竟块。讓小數(shù)據(jù)庫不讓浪費太多的磁盤空間壶运,同時讓大數(shù)據(jù)在磁盤上有連續(xù)的空間。
-rwxrwxrwx 1 mongodb zhoujy 16M 6月 11 14:44 test.0
-rwxrwxrwx 1 mongodb zhoujy 32M 6月 1 21:36 test.1
-rwxrwxrwx 1 mongodb zhoujy 16M 6月 11 14:44 test.ns
drwxr-xr-x 2 root root 4.0K 6月 10 11:57 _tmp
nssize = 16
profile:數(shù)據(jù)庫分析等級設(shè)置彩郊。記錄一些操作性能到標準輸出或則指定的logpath的日志文件中前弯,默認0:關(guān)閉。
級別 | 設(shè)置 |
---|---|
0 | 關(guān)秫逝。無分析恕出。 |
1 | 開。僅包括慢操作违帆。 |
2 | 開浙巫。包括所有操作。 |
控制 Profiling 的開關(guān)和級別:2種
第一種是直接在啟動參數(shù)里直接進行設(shè)置或則啟動MongoDB時加上–profile=級別,其信息保存在 生成的system.profile 中。
profile = 2
第二種是在客戶端用db.setProfilingLevel(級別)命令來實時配置煎娇,其信息保存在 生成的system.profile 中。
[initandlisten] creating profile collection: local.system.profile
> db.setProfilingLevel(2)
{ "was" : 0, "slowms" : 100, "ok" : 1 }
> db.getProfilingStatus()
{ "was" : 2, "slowms" : 100 }
默認情況下,mongod的禁用分析攀涵。數(shù)據(jù)庫分析可以影響數(shù)據(jù)庫的性能玲躯,因為分析器必須記錄和處理所有的數(shù)據(jù)庫操作橱野。所以在需要的時候用動態(tài)修改就可以了。
slowms:記錄profile分析的慢查詢的時間,默認是100毫秒薪鹦。具體同上楷兽。
slowms = 200
> db.getProfilingStatus()
{ "was" : 2, "slowms" : 200 }
quota:配額,默認false寻馏。是否開啟配置每個數(shù)據(jù)庫的最多文件數(shù)的限制漾岳。當為true則用quotaFiles來配置最多文件的數(shù)量。
quota = true
quotaFiles:配額數(shù)量液样。每個數(shù)據(jù)庫的數(shù)據(jù)文件數(shù)量的限制麸祷。此選項需要quota為true。默認為8。
quotaFiles = 8
rest: 默認false,設(shè)置為true,使一個簡單的 REST API倒彰。
rest = true
設(shè)置為true,開啟后,在MongoDB默認會開啟一個HTTP協(xié)議的端口提供REST的服務(wù)(nohttpinterface = false),這個端口是你Server端口加上1000,即28017,默認的HTTP端口是數(shù)據(jù)庫狀態(tài)頁面,(開啟后,web頁面的Commands 行中的命令都可以點進去)。mongodb自帶的REST践樱,不支持 增、刪忽洛、改,同時也不支持 權(quán)限認證环肘。 詳細信息見這里和這里。
repair:修復(fù)數(shù)據(jù)庫操作,默認是false。
設(shè)置為true時,啟動后修復(fù)所有數(shù)據(jù)庫,設(shè)置這個選項最好在命令行上伊磺,而不是在配置文件或控制腳本。如:
命令行修復(fù):
> db.repairDatabase('xxx')
{ "ok" : 1 }
> db.repairDatabase()
{ "ok" : 1 }
啟動時修復(fù):
repair = true
root@m3:/var/log/mongodb# mongod --repair
啟動時修復(fù)团搞,需要關(guān)閉journal拨匆,否則報錯:
Can't specify both --journal and --repair options.
并且啟動時样刷,用控制文件指定參數(shù)和配置文件里指定參數(shù)的方式進行修復(fù)之后,(修復(fù)信息見log),需要再禁用repair參數(shù)才能啟用mongodb蔚携。
注意:mongod修復(fù)時,需要重寫所有的數(shù)據(jù)庫文件霉咨。如果在同一個帳號下不能運行修復(fù),則需要運行chown修改數(shù)據(jù)庫文件的權(quán)限矮男。
repairpath:修復(fù)路徑秒赤,默認是在dbpath路徑下的_tmp 目錄锅风。
drwxr-xr-x 2 root root 4.0K 6月 11 20:23 _tmp
smallfiles:是否使用較小的默認文件。默認為false,不使用婆誓。
設(shè)置為true,使用較小的默認數(shù)據(jù)文件大小。smallfiles減少數(shù)據(jù)文件的初始大小,并限制他們到512M译柏,也減少了日志文件的大小,并限制他們到128M寒波。
如果數(shù)據(jù)庫很大,各持有少量的數(shù)據(jù)风纠,會導(dǎo)致mongodb創(chuàng)建很多文件速址,會影響性能甥郑。
smallfiles = true
syncdelay:刷寫數(shù)據(jù)到日志的頻率癌瘾,通過fsync操作數(shù)據(jù)轻掩。默認60秒。
syncdelay = 60
默認就可以掺栅,不需要設(shè)置。不會對日志文件(journal files)有影響
警告:如果設(shè)置為0虚循,SYNCDELAY 不會同步到磁盤的內(nèi)存映射文件斗蒋。在生產(chǎn)系統(tǒng)上,不要設(shè)置這個值柴我。
sysinfo:系統(tǒng)信息,默認false疾牲。
設(shè)置為true一汽,mongod會診斷系統(tǒng)有關(guān)的頁面大小岩喷,數(shù)量的物理頁面,可用物理??頁面的數(shù)量輸出到標準輸出妓忍。
Tue Jun 11 21:07:15.031 sysinfo:
Tue Jun 11 21:07:15.035 page size: 4096
Tue Jun 11 21:07:15.035 _SC_PHYS_PAGES: 256318
Tue Jun 11 21:07:15.035 _SC_AVPHYS_PAGES: 19895
當開啟sysinfo參數(shù)的時候世剖,只會打印上面的信息,不會啟動mongodb的程序翎苫。所以要關(guān)閉該參數(shù)漫雷,才能開啟mongodb。
upgrade:升級脯倚。默認為false渔彰。
當設(shè)置為true,指定DBPATH推正,升級磁盤上的數(shù)據(jù)格式的文件到最新版本恍涂。會影響數(shù)據(jù)庫操作,更新元數(shù)據(jù)植榕。大部分情況下再沧,不需要設(shè)置該值。
traceExceptions:是否使用內(nèi)部診斷尊残。默認false炒瘸。
traceExceptions = false
quiet:安靜模式淤堵。
quiet = true
setParameter:2.4的新參數(shù),指定啟動選項配置顷扩。想設(shè)置多個選項則用一個setParameter選項指定拐邪,可以setParameter的參數(shù)請見這里,詳情請見這里
聲明setParameter設(shè)置在這個文件中隘截,使用下面的格式:
setParameter = <parameter>=<value>
如配置文件里設(shè)置syncdelay:
setParameter = syncdelay= 55,notablescan = true,journalCommitInterval = 50,traceExceptions = true
Replication Options 復(fù)制選項
replSet:使用此設(shè)置來配置復(fù)制副本集扎阶。指定一個副本集名稱作為參數(shù),所有主機都必須有相同的名稱作為同一個副本集技俐。
oplogSize:指定的復(fù)制操作日志(OPLOG)的最大大小。mongod創(chuàng)建一個OPLOG的大小基于最大可用空間量统台。對于64位系統(tǒng)雕擂,OPLOG通常是5%的可用磁盤空間。
一旦mongod第一次創(chuàng)建OPLOG贱勃,改變oplogSize將不會影響OPLOG的大小井赌。
fastsync:默認為false。在副本集下贵扰,設(shè)置為true仇穗,從一個dbpath里啟用從庫復(fù)制服務(wù),該dbpath的數(shù)據(jù)庫是主庫的快照戚绕,可用于快速啟用同步纹坐,否則的mongod將嘗試執(zhí)行初始同步。注意:如果數(shù)據(jù)不完全同步舞丛,mongod指定fastsync開啟耘子,secondary或slave與主永久不同步,這可能會導(dǎo)致顯著的一致性問題球切。
replIndexPrefetch:2.2版本出現(xiàn)的新參數(shù)谷誓,默認是all《执眨可以設(shè)置的值有:all, none, and _id_only捍歪。只能在副本集(replSet)中使用。默認情況下鸵钝,secondary副本集的成員將加載所有索引到內(nèi)存中(從OPLOG之前的操作有關(guān)的)糙臼。您可以修改此行為,使secondary只會加載_id索引恩商。指定id或none弓摘,防止mongod的任何索引加載到內(nèi)存。
Master/Slave Replication:主從復(fù)制的相關(guān)設(shè)置
master:默認為false痕届,當設(shè)置為true韧献,則配置當前實例作為主實例末患。
master = true
slave:默認為false,當設(shè)置為true锤窑,則配置當前實例作為從實例璧针。
slave = true
source:默認為空,格式為:<host><:port>渊啰。用于從實例的復(fù)制:設(shè)置從的時候指定該選項會讓從復(fù)制指定主的實例
source = 127.0.0.1:30001
only:默認為空探橱,用于從選項,指定一個數(shù)據(jù)庫進行復(fù)制绘证。
only = abc #只同步abc集合(庫)
slavedelay:設(shè)置從庫同步主庫的延遲時間隧膏,用于從設(shè)置,默認為0嚷那。
slavedelay = 60 #延遲60s同步主數(shù)據(jù)
autoresync:默認為false胞枕,用于從設(shè)置。是否自動重新同步魏宽。設(shè)置為true腐泻,如果落后主超過10秒,會強制從自動重新同步队询。如果oplogSize太小派桩,此設(shè)置可能有問題。如果OPLOG大小不足以存儲主的變化狀態(tài)和從的狀態(tài)變化之間的差異蚌斩,這種情況下強制重新同步是不必要的铆惑。當設(shè)置autoresync選項設(shè)置為false,10分鐘內(nèi)從不會進行大于1次的自動重新同步送膳。
autoresync = false