歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

centos Mongodb 基礎使用

成功啟動MongoDB後,再打開一個命令行窗口輸入mongo,就可以進行數據庫的一些操作。

輸入help可以看到基本操作命令:
show dbs:顯示數據庫列表
show collections:顯示當前數據庫中的集合(類似關系數據庫中的表)
show users:顯示用戶

use :切換當前數據庫,這和MS-SQL裡面的意思一樣
db.help():顯示數據庫操作命令,裡面有很多的命令
db.foo.help():顯示集合操作命令,同樣有很多的命令,foo指的是當前數據庫下,一個叫foo的集合,並非真正意義上的命令
db.foo.find():對於當前數據庫中的foo集合進行數據查找(由於沒有條件,會列出所有數據)
db.foo.find( { a : 1 } ):對於當前數據庫中的foo集合進行查找,條件是數據中有一個屬性叫a,且a的值為1

MongoDB沒有創建數據庫的命令,但有類似的命令。

如:如果你想創建一個“myTest”的數據庫,先運行use myTest命令,之後就做一些操作(如:db.createCollection(‘user’)),這樣就可以創建一個名叫“myTest”的數據庫。

數據庫常用命令

1、Help查看命令提示

help

db.help();

db.yourColl.help();

db.youColl.find().help();

rs.help();

2、切換/創建數據庫

use yourDB; 當創建一個集合(table)的時候會自動創建當前數據庫

3、查詢所有數據庫

show dbs;

4、刪除當前使用數據庫

db.dropDatabase();

5、從指定主機上克隆數據庫

db.cloneDatabase(“127.0.0.1”); 將指定機器上的數據庫的數據克隆到當前數據庫

6、從指定的機器上復制指定數據庫數據到某個數據庫

db.copyDatabase(“mydb”, “temp”, “127.0.0.1”);將本機的mydb的數據復制到temp數據庫中

7、修復當前數據庫

db.repairDatabase();

8、查看當前使用的數據庫

db.getName();

db; db和getName方法是一樣的效果,都可以查詢當前使用的數據庫

9、顯示當前db狀態

db.stats();

10、當前db版本

db.version();

11、查看當前db的鏈接機器地址

db.getMongo();

Collection聚集集合

1、創建一個聚集集合(table)

db.createCollection(“collName”, {size: 20, capped: 5, max: 100});

2、得到指定名稱的聚集集合(table)

db.getCollection(“account”);

3、得到當前db的所有聚集集合

db.getCollectionNames();

4、顯示當前db所有聚集索引的狀態

db.printCollectionStats();

用戶相關

1、添加一個用戶

db.addUser(“name”);

db.addUser(“userName”, “pwd123″, true); 添加用戶、設置密碼、是否只讀

2、數據庫認證、安全模式

db.auth(“userName”, “123123”);

3、顯示當前所有用戶

show users;

4、刪除用戶

db.removeUser(“userName”);

其他

1、查詢之前的錯誤信息
db.getPrevError();
2、清除錯誤記錄
db.resetError();

查看聚集集合基本信息

1、查看幫助 db.yourColl.help();
2、查詢當前集合的數據條數 db.yourColl.count();
3、查看數據空間大小 db.userInfo.dataSize();
4、得到當前聚集集合所在的db db.userInfo.getDB();
5、得到當前聚集的狀態 db.userInfo.stats();
6、得到聚集集合總大小 db.userInfo.totalSize();
7、聚集集合儲存空間大小 db.userInfo.storageSize();
8、Shard版本信息 db.userInfo.getShardVersion()
9、聚集集合重命名 db.userInfo.renameCollection(“users”); 將userInfo重命名為users
10、刪除當前聚集集合 db.userInfo.drop();

聚集集合查詢

1、查詢所有記錄
db.userInfo.find();
相當於:select* from userInfo;
默認每頁顯示20條記錄,當顯示不下的情況下,可以用it迭代命令查詢下一頁數據。注意:鍵入it命令不能帶“;”
但是你可以設置每頁顯示數據的大小,用DBQuery.shellBatchSize= 50;這樣每頁就顯示50條記錄了。

2、查詢去掉後的當前聚集集合中的某列的重復數據
db.userInfo.distinct(“name”);
會過濾掉name中的相同數據
相當於:select distict name from userInfo;

3、查詢age = 22的記錄
db.userInfo.find({“age”: 22});
相當於: select * from userInfo where age = 22;

4、查詢age > 22的記錄
db.userInfo.find({age: {$gt: 22}});
相當於:select * from userInfo where age >22;

5、查詢age < 22的記錄
db.userInfo.find({age: {$lt: 22}});
相當於:select * from userInfo where age <22;

6、查詢age >= 25的記錄
db.userInfo.find({age: {$gte: 25}});
相當於:select * from userInfo where age >= 25;

7、查詢age <= 25的記錄
db.userInfo.find({age: {$lte: 25}});

8、查詢age >= 23 並且 age <= 26
db.userInfo.find({age: {$gte: 23, $lte: 26}});

9、查詢name中包含 mongo的數據
db.userInfo.find({name: /mongo/});
//相當於%%
select * from userInfo where name like ‘%mongo%’;

10、查詢name中以mongo開頭的
db.userInfo.find({name: /^mongo/});
select * from userInfo where name like ‘mongo%’;

11、查詢指定列name、age數據
db.userInfo.find({}, {name: 1, age: 1});
相當於:select name, age from userInfo;
當然name也可以用true或false,當用ture的情況下河name:1效果一樣,如果用false就是排除name,顯示name以外的列信息。

12、查詢指定列name、age數據, age > 25
db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});
相當於:select name, age from userInfo where age >25;

13、按照年齡排序
升序:db.userInfo.find().sort({age: 1});
降序:db.userInfo.find().sort({age: -1});

14、查詢name = zhangsan, age = 22的數據
db.userInfo.find({name: ‘zhangsan’, age: 22});
相當於:select * from userInfo where name = ‘zhangsan’ and age = ‘22’;

15、查詢前5條數據
db.userInfo.find().limit(5);
相當於:selecttop 5 * from userInfo;

16、查詢10條以後的數據
db.userInfo.find().skip(10);
相當於:select * from userInfo where id not in (
selecttop 10 * from userInfo
);

17、查詢在5-10之間的數據
db.userInfo.find().limit(10).skip(5);
可用於分頁,limit是pageSize,skip是第幾頁*pageSize

18、or與 查詢
db.userInfo.find({$or: [{age: 22}, {age: 25}]});
相當於:select * from userInfo where age = 22 or age = 25;

19、查詢第一條數據
db.userInfo.findOne();
相當於:selecttop 1 * from userInfo;
db.userInfo.find().limit(1);

20、查詢某個結果集的記錄條數
db.userInfo.find({age: {$gte: 25}}).count();
相當於:select count(*) from userInfo where age >= 20;

21、按照某列進行排序
db.userInfo.find({sex: {$exists: true}}).count();
相當於:select count(sex) from userInfo;
索引
1、創建索引
db.userInfo.ensureIndex({name: 1});
db.userInfo.ensureIndex({name: 1, ts: -1});

2、查詢當前聚集集合所有索引
db.userInfo.getIndexes();

3、查看總索引記錄大小
db.userInfo.totalIndexSize();

4、讀取當前集合的所有index信息
db.users.reIndex();

5、刪除指定索引
db.users.dropIndex(“name_1″);

6、刪除所有索引索引
db.users.dropIndexes();
修改、添加、刪除集合數據

1、添加
db.users.save({name: ‘zhangsan’, age: 25, sex: true});
添加的數據的數據列,沒有固定,根據添加的數據為准

2、修改
db.users.update({age: 25}, {$set: {name: ‘changeName’}}, false, true);
相當於:update users set name = ‘changeName’ where age = 25;

db.users.update({name: ‘Lisi’}, {$inc: {age: 50}}, false, true);
相當於:update users set age = age + 50 where name = ‘Lisi’;

db.users.update({name: ‘Lisi’}, {$inc: {age: 50}, $set: {name: ‘hoho’}}, false, true);
相當於:update users set age = age + 50, name = ‘hoho’ where name = ‘Lisi’;

3、刪除
db.users.remove({age: 132});

4、查詢修改刪除
db.users.findAndModify({
query: {age: {$gte: 25}},
sort: {age: -1},
update: {$set: {name: ‘a2′}, $inc: {age: 2}},
remove: true
});

db.runCommand({ findandmodify : “users”,
query: {age: {$gte: 25}},
sort: {age: -1},
update: {$set: {name: ‘a2′}, $inc: {age: 2}},
remove: true
});

語句塊操作

1、簡單Hello World
print(“Hello World!”);
這種寫法調用了print函數,和直接寫入”Hello World!”的效果是一樣的;

2、將一個對象轉換成json
tojson(new Object());
tojson(new Object(‘a’));

3、循環添加數據
> for (var i = 0; i < 30; i++) {
… db.users.save({name: “u_” + i, age: 22 + i, sex: i % 2});
… };
這樣就循環添加了30條數據,同樣也可以省略括號的寫法
> for (var i = 0; i < 30; i++) db.users.save({name: “u_” + i, age: 22 + i, sex: i % 2});
也是可以的,當你用db.users.find()查詢的時候,顯示多條數據而無法一頁顯示的情況下,可以用it查看下一頁的信息;

4、find 游標查詢
>var cursor = db.users.find();
> while (cursor.hasNext()) {
printjson(cursor.next());
}
這樣就查詢所有的users信息,同樣可以這樣寫
var cursor = db.users.find();
while (cursor.hasNext()) { printjson(cursor.next); }
同樣可以省略{}號

5、forEach迭代循環
db.users.find().forEach(printjson);
forEach中必須傳遞一個函數來處理每條迭代的數據信息

6、將find游標當數組處理
var cursor = db.users.find();
cursor[4];
取得下標索引為4的那條數據
既然可以當做數組處理,那麼就可以獲得它的長度:cursor.length();或者cursor.count();
那樣我們也可以用循環顯示數據
for (var i = 0, len = c.length(); i < len; i++) printjson(c[i]);

7、將find游標轉換成數組
> var arr = db.users.find().toArray();
> printjson(arr[2]);
用toArray方法將其轉換為數組

8、定制我們自己的查詢結果
只顯示age <= 28的並且只顯示age這列數據
db.users.find({age: {$lte: 28}}, {age: 1}).forEach(printjson);
db.users.find({age: {$lte: 28}}, {age: true}).forEach(printjson);
排除age的列
db.users.find({age: {$lte: 28}}, {age: false}).forEach(printjson);

9、forEach傳遞函數顯示信息
db.things.find({x:4}).forEach(function(x) {print(tojson(x));});

 

配置詳解

此處摘自:http://www.cnblogs.com/zhoujinyi/p/3130231.html

啟動MongoDB有2種方式,一是直接指定配置參數,二是指定配置文件。這裡先介紹配置文件,啟動方式如下:

mongod –config /etc/mongodb.conf
配置如下:

verbose:日志信息冗余。默認false。提高內部報告標准輸出或記錄到logpath配置的日志文件中。要啟用verbose或啟用verbosity 用vvvv參數,如:

verbose = true
vvvv = true
ps:啟動verbose冗長信息,它的級別有 vv~vvvvv,v越多級別越高,在日志文件中記錄的信息越詳細。

port:端口。默認27017,MongoDB的默認服務TCP端口,監聽客戶端連接。要是端口設置小於1024,比如1021,則需要root權限啟動,不能用mongodb帳號啟動,(普通帳號即使是27017也起不來)否則報錯:[mongo –port=1021 連接]

ERROR: listen(): bind() failed errno:13 Permission denied for socket: 127.0.0.1:1021
port = 27017
bind_ip:綁定地址。默認127.0.0.1,只能通過本地連接。進程綁定和監聽來自這個地址上的應用連接。要是需要給其他服務器連接,則需要注釋掉這個或則把IP改成本機地址,如192.168.200.201[其他服務器用 mongo –host=192.168.200.201 連接] ,可以用一個逗號分隔的列表綁定多個IP地址。

bind_ip = 127.0.0.1
maxConns:最大連接數。默認值:取決於系統(即的ulimit和文件描述符)限制。MongoDB中不會限制其自身的連接。當設置大於系統的限制,則無效,以系統限制為准。這對於客戶端創建很多“表”,允許連接超時而不關閉“表”的時候很有用。設置該值的高於連接池和總連接數的大小,以防止尖峰時候的連接。注意:不能設置該值大於20000。

maxConns = 100
objcheck:強制驗證客戶端請求。2.4的默認設置為objcheck成為true,在早期版本objcheck默認為false。因為它強制驗證客戶端請求,確保客戶端絕不插入無效文件到數據庫中。對於嵌套文檔的對象,會有一點性能影響。設置noobjcheck 關閉。

objcheck = true
#noobjcheck = false
noobjcheck:同上,默認關閉false。

#noobjcheck = false
logpath:指定日志文件,該文件將保存所有的日志記錄、診斷信息。除非另有指定,mongod將所有的日志信息輸出到標准輸出。如果沒有指定logappend,重啟則日志會進行覆蓋操作。

logpath=/var/log/mongodb/mongodb.log
logappend:寫日志的模式:設置為true為追加。默認是覆蓋。如果未指定此設置,啟動時MongoDB的將覆蓋現有的日志文件。

logappend=true
syslog:日志輸出都發送到主機的syslog系統,而不是標准輸出到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文件。當設置為true時,不會生成socket文件。

nounixsocket = false
unixSocketPrefix:套接字文件路徑,默認/tmp

unixSocketPrefix = /tmp
fork:是否後台運行,設置為true 啟動 進程在後台運行的守護進程模式。默認false。

fork = true
auth:用戶認證,默認false。不需要認證。當設置為true時候,進入數據庫需要auth驗證,當數據庫裡沒有用戶,則不需要驗證也可以操作。直到創建了第一個用戶,之後操作都需要驗證。

auth = true
比如:通過db.addUser(‘sa’,’sa’) 在admin庫下面創建一個超級用戶,只能在在admin庫下面先認證完畢了:ab.auth(‘sa’,’sa’) ,才能去別的庫操作,不能在其他庫驗證。這樣連接數據庫也需要指定庫:

mongo -usa -psa admin #sa 帳號連接admin
mongo -uaa -paa test #aa 帳號連接test
noauth:禁止用戶認證,默認true。同上

noauth = true
cpu:設置為true會強制mongodb每4s報告cpu利用率和io等待,把日志信息寫到標准輸出或日志文件。默認為false。

cpu = true
開啟日志會出現:

Mon Jun 10 10:21:42.241 [snapshotthread] cpu: elapsed:4000 writelock: 0%
dbpath:數據存放目錄。默認: /data/db/

dbpath=/var/lib/mongodb
diaglog:創建一個非常詳細的故障排除和各種錯誤的診斷日志記錄。默認0。設置為1,為在dbpath目錄裡生成一個diaglog.開頭的日志文件,他的值如下:

Value Setting
0 off. No logging. #關閉。沒有記錄。
1 Log write operations. #寫操作
2 Log read operations. #讀操作
3 Log both read and write operations. #讀寫操作
7 Log write and some read operations. #寫和一些讀操作
設置不等於0,日志會每分鐘flush 一次:

Mon Jun 10 11:16:17.504 [DataFileSync] flushing diag log
Mon Jun 10 11:17:17.442 [DataFileSync] flushing diag log
產生的日志可以用mongosniff 來查看:要是mongosniff[類似於tcpdump的作為一個MongoDB的特定的TCP/ IP網絡流量]出現報錯和具體用法,請見這裡,之前先執行:apt-get install libpcap-dev

root@m3:/var/lib/mongodb# mongosniff –source DIAGLOG diaglog.51b542a9
注意:當重新設置成0,會停止寫入文件,但mongod還是繼續保持打開該文件,即使它不再寫入數據文件。如果你想重命名,移動或刪除診斷日志,你必須完全關閉mongod實例。

diaglog = 3
directoryperdb:設置為true,修改數據目錄存儲模式,每個數據庫的文件存儲在DBPATH指定目錄的不同的文件夾中。使用此選項,可以配置的MongoDB將數據存儲在不同的磁盤設備上,以提高寫入吞吐量或磁盤容量。默認為false。
注意:要是在運行一段時間的數據庫中,開啟該參數,會導致原始的數據都會消失(注釋參數則會回來)。因為數據目錄都不同了,除非遷移現有的數據文件到directoryperdb產生的數據庫目錄中,如:
root@m3:/var/lib/mongodb# mv test.* test/
把test數據文件遷移到directoryperdb產生的數據庫test目錄中。 所以需要在規劃好之後確定是否要開啟。

directoryperdb = ture
復制代碼
原始數據結構:
journal
mongod.lock
local.0
local.1
local.ns
test.0
test.1
test.ns

開啟 directoryperdb,並把數據文件遷移到相關的數據目錄後的結構:

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位系統)true。
默認值:(32位系統)false。
設置為true,啟用操作日志,以確保寫入持久性和數據的一致性,會在dbpath目錄下創建journal目錄。
設置為false,以防止日志持久性的情況下,並不需要開銷。為了減少磁盤上使用的日志的影響,您可以啟用nojournal,並設置為true。
注意:在64位系統上禁用日志必須使用帶有nojournal的。

#journal=true
journal=false
32位OS:

Tue Jun 11 12:17:09.628 [initandlisten] ** NOTE: This is a 32 bit MongoDB binary.
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:

Tue Jun 11 12:29:34 [initandlisten] journal dir=/var/lib/mongodb/journal
Tue Jun 11 12:29:34 [initandlisten] recover : no journal files present, no recovery needed
nojournal:禁止日志
默認值:(在64位系統)false。
默認值:(32位系統)true。
設置nojournal為true關閉日志,64位,2.0版本後的mongodb默認是啟用 journal日志。

nojournal=true
journalCommitInterval:刷寫提交機制,默認是30ms或則100ms。較低的值,會更消耗磁盤的性能。
此選項接受2和300毫秒之間的值:
如果單塊設備提供日志和數據文件,默認的日記提交時間間隔為100毫秒。
如果不同的塊設備提供的日志和數據文件,默認的日記提交的時間間隔為30毫秒。

journalCommitInterval=100
ipv6:是否支持ipv6,默認false。

jsonp:是否允許JSONP訪問通過一個HTTP接口,默認false。

nohttpinterface:是否禁止http接口,即28017 端口開啟的服務。默認false,支持。

nohttpinterface = false
noprealloc:預分配方式。
默認false:使用預分配方式來保證寫入性能的穩定,預分配在後台進行,並且每個預分配的文件都用0進行填充。這會讓MongoDB始終保持額外的空間和空余的數據文件,從而避免了數據增長過快而帶來的分配磁盤空間引起的阻塞。
設置noprealloc= true來禁用預分配的數據文件,會縮短啟動時間,但在正常操作過程中,可能會導致性能顯著下降。

noprealloc = false
noscripting:是否禁止腳本引擎。默認是false:不禁止。ture:禁止
要是設置成true:運行一些腳本的時候會出現:

JavaScript execution failed: group command failed: { “ok” : 0, “errmsg” : “server-side JavaScript execution is disabled” }
#noscripting = true <====> noscripting = false
notablescan:是否禁止表掃描操作。默認false:不禁止,ture:禁止

禁止要是執行表掃描會出現:

error: { “$err” : “table scans not allowed:test.emp”, “code” : 10111 }
可以動態修改設置:

db.adminCommand({setParameter:1, notablescan:false})
#notablescan = true <====> notablescan = false
nssize:命名空間的文件(即NS)的默認大小,默認16M,最大2G。
所有新創建的默認大小命名空間的文件(即NS)。此選項不會影響現有的命名空間的文件的大小。默認值是16M字節,最大大小為2 GB。讓小數據庫不讓浪費太多的磁盤空間,同時讓大數據在磁盤上有連續的空間。

-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:數據庫分析等級設置。記錄一些操作性能到標准輸出或則指定的logpath的日志文件中,默認0:關閉。

級別 設置
0 關。無分析。
1 開。僅包括慢操作。
2 開。包括所有操作。
控制 Profiling 的開關和級別:2種
第一種是直接在啟動參數裡直接進行設置或則啟動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的禁用分析。數據庫分析可以影響數據庫的性能,因為分析器必須記錄和處理所有的數據庫操作。所以在需要的時候用動態修改就可以了。

slowms:記錄profile分析的慢查詢的時間,默認是100毫秒。具體同上。

slowms = 200
> db.getProfilingStatus()
{ “was” : 2, “slowms” : 200 }
quota:配額,默認false。是否開啟配置每個數據庫的最多文件數的限制。當為true則用quotaFiles來配置最多文件的數量。

quota = true
quotaFiles:配額數量。每個數據庫的數據文件數量的限制。此選項需要quota為true。默認為8。

quotaFiles = 8
rest: 默認false,設置為true,使一個簡單的 REST API。

rest = true
設置為true,開啟後,在MongoDB默認會開啟一個HTTP協議的端口提供REST的服務(nohttpinterface = false),這個端口是你Server端口加上1000,即28017,默認的HTTP端口是數據庫狀態頁面,(開啟後,web頁面的Commands 行中的命令都可以點進去)。mongodb自帶的REST,不支持 增、刪、改,同時也不支持 權限認證。
詳細信息見這裡和這裡。
repair:修復數據庫操作,默認是false。
設置為true時,啟動後修復所有數據庫,設置這個選項最好在命令行上,而不是在配置文件或控制腳本。如:
命令行修復:

> db.repairDatabase(‘xxx’)
{ “ok” : 1 }
> db.repairDatabase()
{ “ok” : 1 }
啟動時修復:

repair = true
root@m3:/var/log/mongodb# mongod –repair
啟動時修復,需要關閉journal,否則報錯:

Can’t specify both –journal and –repair options.
並且啟動時,用控制文件指定參數和配置文件裡指定參數的方式進行修復之後,(修復信息見log),需要再禁用repair參數才能啟用mongodb。
注意:mongod修復時,需要重寫所有的數據庫文件。如果在同一個帳號下不能運行修復,則需要運行chown修改數據庫文件的權限。

repairpath:修復路徑,默認是在dbpath路徑下的_tmp 目錄。

drwxr-xr-x 2 root root 4.0K 6月 11 20:23 _tmp
smallfiles:是否使用較小的默認文件。默認為false,不使用。
設置為true,使用較小的默認數據文件大小。smallfiles減少數據文件的初始大小,並限制他們到512M,也減少了日志文件的大小,並限制他們到128M。
如果數據庫很大,各持有少量的數據,會導致mongodb創建很多文件,會影響性能。

smallfiles = true
syncdelay:刷寫數據到日志的頻率,通過fsync操作數據。默認60秒。

syncdelay = 60
默認就可以,不需要設置。不會對日志文件(journal files)有影響

警告:如果設置為0,SYNCDELAY 不會同步到磁盤的內存映射文件。在生產系統上,不要設置這個值。

sysinfo:系統信息,默認false。

設置為true,mongod會診斷系統有關的頁面大小,數量的物理頁面,可用物理??頁面的數量輸出到標准輸出。

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參數的時候,只會打印上面的信息,不會啟動mongodb的程序。所以要關閉該參數,才能開啟mongodb。

upgrade:升級。默認為false。
當設置為true,指定DBPATH,升級磁盤上的數據格式的文件到最新版本。會影響數據庫操作,更新元數據。大部分情況下,不需要設置該值。

traceExceptions:是否使用內部診斷。默認false。

traceExceptions = false
quiet:安靜模式。

quiet = true
setParameter:2.4的新參數,指定啟動選項配置。想設置多個選項則用一個setParameter選項指定,可以setParameter的參數請見這裡,詳情請見這裡
聲明setParameter設置在這個文件中,使用下面的格式:

setParameter = =
如配置文件裡設置syncdelay:

setParameter = syncdelay= 55,notablescan = true,journalCommitInterval = 50,traceExceptions = true
Replication Options 復制選項
replSet:使用此設置來配置復制副本集。指定一個副本集名稱作為參數,所有主機都必須有相同的名稱作為同一個副本集。

oplogSize:指定的復制操作日志(OPLOG)的最大大小。mongod創建一個OPLOG的大小基於最大可用空間量。對於64位系統,OPLOG通常是5%的可用磁盤空間。
一旦mongod第一次創建OPLOG,改變oplogSize將不會影響OPLOG的大小。

fastsync:默認為false。在副本集下,設置為true,從一個dbpath裡啟用從庫復制服務,該dbpath的數據庫是主庫的快照,可用於快速啟用同步,否則的mongod將嘗試執行初始同步。注意:如果數據不完全同步,mongod指定fastsync開啟,secondary或slave與主永久不同步,這可能會導致顯著的一致性問題。

replIndexPrefetch:2.2版本出現的新參數,默認是all。可以設置的值有:all, none, and _id_only。只能在副本集(replSet)中使用。默認情況下,secondary副本集的成員將加載所有索引到內存中(從OPLOG之前的操作有關的)。您可以修改此行為,使secondary只會加載_id索引。指定_id_或none,防止mongod的任何索引加載到內存。

Master/Slave Replication:主從復制的相關設置

master:默認為false,當設置為true,則配置當前實例作為主實例。

master = true
slave:默認為false,當設置為true,則配置當前實例作為從實例。

slave = true
source:默認為空,格式為:<:port>。用於從實例的復制:設置從的時候指定該選項會讓從復制指定主的實例

source = 127.0.0.1:30001
only:默認為空,用於從選項,指定一個數據庫進行復制。

only = abc #只同步abc集合(庫)
slavedelay:設置從庫同步主庫的延遲時間,用於從設置,默認為0。

slavedelay = 60 #延遲60s同步主數據
autoresync:默認為false,用於從設置。是否自動重新同步。設置為true,如果落後主超過10秒,會強制從自動重新同步。如果oplogSize太小,此設置可能有問題。如果OPLOG大小不足以存儲主的變化狀態和從的狀態變化之間的差異,這種情況下強制重新同步是不必要的。當設置autoresync選項設置為false,10分鐘內從不會進行大於1次的自動重新同步。

autoresync = false

Copyright © Linux教程網 All Rights Reserved