MongoDB 生態 - 官方命令行工具

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章