Mongo shell
MongoDB 的命令行管理工具,也是 mongodb 最常用的工具,功能非常豐富,比如常用的
- show dbs / show tables / show users ...
- db.stats() 查看 db 的元數據信息
- db.colleciont.stats() 查看集合的元數據信息
- db.serverStatus() 查看數據庫狀態信息
- rs.conf() 查看複製集的配置信息
- rs.status() 查看複製集的狀態信息
- rs.reconfig() 更改複製集的配置
- db.printSlaveReplicationInfo() 查看主備同步延時
- db.runCommand() 執行命令
- ...
值得一提的是,Mongo shell 還能直接執行js 腳本,對於單個語句沒法完成的操作,可以寫個簡單的 js 腳本,然後通過 mongo shell 來調用,這個功能對於日常的管理、分析等非常方便。
mongo --host localhost:27017 do_something.js
mongo shell 還支持命令歷史、命令補全等非常貼心的功能,用起來跟Linux bash 的體驗差不多。
mongostat
mongostat 也是很常用的工具,能查看MongoDB 實時的增刪改查操作的 pqs、以及內存使用、網絡吞吐的信息。
$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 也支持按複製集的方式去連接,可以同時查看複製集多個節點的實時性能數據。
如果使用的是MongoDB 3.2的最新版本,dirty持續超過20 或者 used 持續超過95,說明實例的訪問已經超負荷了,可能 cpu 或 IO 資源已經不夠用了,需要重點關注下。
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 的格式導出 MongoDB 存儲的數據,然後使用 mongoimport 將其導入到其他的實例;mongoexport 支持導出單個集合的數據,並能指定查詢條件來導出部分符合條件的數據。
mongoexport --db sales --collection contacts --query '{"field": 1}'
mongodump/mongorestore
mongodump 與 mongoexport 類似,可用於導出 MongoDB 的數據,不同的時,mongodump 導出的數據以 BSON 的格式存儲(BSON 格式數據可以通過 bsondump 工具來轉換爲 json),存儲空間佔用上比 JSON、CSV 更小,另外,mongodump 還支持對導出的數據進行壓縮、歸檔,所以如果要對 MongoDB 的數據進行定期備份,推薦使用 mongodump 或 直接進行物理文件備份。
mongodump --archive=test.20150715.gz --gzip --db test
mongooplog
mongooplog 可以用於2個獨立的 MongoDB 實例間的數據同步,它會不斷的從源實例拉取 oplog(tailable cursor),然後重放到目標實例。
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 的抓包工具,直接下載二進制包可能並不包含這個工具,需要下載源碼編譯出來,mongosniff 可以抓取某個 MongoDB 實例的所有請求及應答數據,對於 MongoDB driver 的開發者非常有幫助,也可以用於一些網絡問題的定位。
$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 的名字很容易誤導人,乍一看以爲是 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