- 求職 : Linux運(yùn)維
- 論壇徽章:
- 203
|
工欲善其事,必先利其器,我們在使用數(shù)據(jù)庫時,通常需要各種工具的支持來提高效率;很多新用戶在剛接觸 MongoDB 時,遇到的問題是『不知道有哪些現(xiàn)成的工具可以使用』,本系列文章將主要介紹 MongoDB 生態(tài)在工具、driver、可視化管理等方面的支持情況。
本文主要介紹 MongoDB 官方的命令行工具
Mongo shell
MongoDB 的命令行管理工具,也是 MongoDB 最常用的工具,功能非常豐富,比如常用的
show dbs / show tables / show users …
db.stats() 查看 db 的元數(shù)據(jù)信息
db.colleciont.stats() 查看集合的元數(shù)據(jù)信息
db.serverStatus() 查看數(shù)據(jù)庫狀態(tài)信息
rs.conf() 查看復(fù)制集的配置信息
rs.status() 查看復(fù)制集的狀態(tài)信息
rs.reconfig() 更改復(fù)制集的配置
db.printSlaveReplicationInfo() 查看主備同步延時
db.runCommand() 執(zhí)行命令
…
值得一提的是,Mongo shell 還能直接執(zhí)行js 腳本,對于單個語句沒法完成的操作,可以寫個簡單的 js 腳本,然后通過 mongo shell 來調(diào)用,這個功能對于日常的管理、分析等非常方便。
mongo --host localhost:27017 do_something.js
mongo shell 還支持命令歷史、命令補(bǔ)全等非常貼心的功能,用起來跟linux bash 的體驗差不多。
mongostat
mongostat 也是很常用的工具,能查看MongoDB 實時的增刪改查操作的 pqs、以及內(nèi)存使用、網(wǎng)絡(luò)吞吐的信息。
$mongostat --host localhost:27017
insert query update delete getmore command % dirty % used flushes vsize res qr|qw ar|aw netIn netOut conn time
7803 93665 15601 7803 0 15604|0 6.1 79.7 0 1.8G 1.1G 0|0 14|2 17m 31m 0 2016-11-29T16:42:00+08:00
7921 95062 15842 7922 0 15842|0 6.4 80.0 0 1.8G 1.1G 7|0 10|1 17m 32m 0 2016-11-29T16:42:01+08:00
7996 95816 15985 7995 0 15978|0 6.5 79.6 0 1.8G 1.1G 2|0 17|1 17m 29m 0 2016-11-29T16:42:02+08:00
7995 96038 16001 7995 0 16009|0 7.3 84.7 0 1.8G 1.1G 1|0 13|3 17m 30m 0 2016-11-29T16:42:03+08:00
7836 93945 15672 7836 0 15665|0 7.3 84.5 0 1.8G 1.1G 0|0 13|1 17m 29m 0 2016-11-29T16:42:04+08:00
mongostat 也支持按復(fù)制集的方式去連接,可以同時查看復(fù)制集多個節(jié)點的實時性能數(shù)據(jù)。
如果使用的是MongoDB 3.2的最新版本,dirty持續(xù)超過20 或者 used 持續(xù)超過95,說明實例的訪問已經(jīng)超負(fù)荷了,可能 cpu 或 IO 資源已經(jīng)不夠用了,需要重點關(guān)注下。
mongotop
mongotop 能實時查看 MongoDB 在哪些集合上花的讀寫時間最多,能快速找出實例里的熱點集合。
$mongotop --host localhost:27017
ns total read write 2016-11-29T16:52:54+08:00
sb.sbtest30 673ms 0ms 673ms
sb.sbtest32 666ms 0ms 666ms
sb.sbtest56 665ms 0ms 665ms
sb.sbtest36 660ms 0ms 660ms
sb.sbtest38 651ms 0ms 651ms
sb.sbtest29 648ms 0ms 648ms
sb.sbtest21 647ms 0ms 647ms
sb.sbtest5 647ms 0ms 647ms
sb.sbtest53 647ms 0ms 647ms
sb.sbtest28 644ms 0ms 644ms
mongoimport/mongoexport
mongoexport 支持以 JSON 或者 CSV 的格式導(dǎo)出 MongoDB 存儲的數(shù)據(jù),然后使用 mongoimport 將其導(dǎo)入到其他的實例;mongoexport 支持導(dǎo)出單個集合的數(shù)據(jù),并能指定查詢條件來導(dǎo)出部分符合條件的數(shù)據(jù)。
mongoexport --db sales --collection contacts --query '{"field": 1}'
mongodump/mongorestore
mongodump 與 mongoexport 類似,可用于導(dǎo)出 MongoDB 的數(shù)據(jù),不同的時,mongodump 導(dǎo)出的數(shù)據(jù)以 BSON 的格式存儲(BSON 格式數(shù)據(jù)可以通過 bsondump 工具來轉(zhuǎn)換為 json),存儲空間占用上比 JSON、CSV 更小,另外,mongodump 還支持對導(dǎo)出的數(shù)據(jù)進(jìn)行壓縮、歸檔,所以如果要對 MongoDB 的數(shù)據(jù)進(jìn)行定期備份,推薦使用 mongodump 或 直接進(jìn)行物理文件備份。
mongodump --archive=test.20150715.gz --gzip --db test
mongooplog
mongooplog 可以用于2個獨立的 MongoDB 實例間的數(shù)據(jù)同步,它會不斷的從源實例拉取 oplog(tailable cursor),然后重放到目標(biāo)實例。
mongooplog --from mongodb0.example.net --host mongodb1.example.net
mongofiles
mongofiles 是 gridfs 的命令行客戶端,用于向 MongoDB 存儲、讀取文件,mongofiles 支持put、get、list等接口。
$mongofiles --host localhost:27017 put hello
$mongofiles --host localhost:27017 get hello
mongosniff
mongosniff 是 MongoDB 的抓包工具,直接下載二進(jìn)制包可能并不包含這個工具,需要下載源碼編譯出來,mongosniff 可以抓取某個 MongoDB 實例的所有請求及應(yīng)答數(shù)據(jù),對于 MongoDB driver 的開發(fā)者非常有幫助,也可以用于一些網(wǎng)絡(luò)問題的定位。
$sudo mongosniff --source NET bond0 27017 | head -n 10
sniffing... 27017
10.1.2.3.3:31405 -->> 10.1.2.3.4:27017 172 bytes id:165a40 1464896
command: replSetHeartbeat database: admin metadata: { $replData: 1 } commandArgs: { replSetHeartbeat: "mongo-9554", configVersion: 23, from: "r101072137.sqa.zmf:9554", fromId: 0, term: 69 } inputDocs: [ ]
10.1.2.3.4:27017 <<-- 10.1.2.3.3:31405 445 bytes id:133027 1257511
commandReply: { ok: 1.0, state: 2, v: 23, hbmsg: "", set: "mongo-9554", syncingTo: "r101072137.sqa.zmf:9554", term: 69, primaryId: 0, durableOpTime: { ts: Timestamp 1480088534000|1, t: 69 }, opTime: { ts: Timestamp 1480088534000|1, t: 69 } } metadata: { $replData: { term: 69, lastOpCommitted: { ts: Timestamp 1480088534000|1, t: 69 }, lastOpVisible: { ts: Timestamp 1479887534000|1, t: 68 }, configVersion: 23, replicaSetId: ObjectId('000000000000000000000000'), primaryIndex: 0, syncSourceIndex: 0 } } outputDocs: [ ]
mongoperf
mongoperf 的名字很容易誤導(dǎo)人,乍一看以為是 mongodb 的性能測試工具,實際上它是用來測試磁盤 IO 性能的工具。
echo "{nThreads:16,fileSizeMB:1000,r:true,w:true}" | mongoperf
new thread, total running : 1
read:1 write:1
2958 ops/sec 11 MB/sec
3022 ops/sec 11 MB/sec
3023 ops/sec 11 MB/sec
2832 ops/sec 11 MB/sec
|
|