MySQL | MongoDB | 說明 |
mysqld | mongod | 服務器守護進程 |
mysql | mongo | 客戶端工具 |
mysqldump | mongodump | 邏輯備份工具 |
mysql | mongorestore | 邏輯恢復工具 |
db.repairDatabase() |
修復數據庫 |
|
mysqldump | mongoexport | 數據導出工具 |
source | mongoimport | 數據導入工具 |
grant * privileges on *.* to … | Db.addUser() | 新建用戶並權限 |
Db.auth() | ||
show databases | show dbs | 顯示庫列表 |
Show tables | Show collections | 顯示錶列表 |
Show slave status | Rs.status | 查詢主從狀態 |
Create table users(a int, b int) | db.createCollection("mycoll", {capped:true, | 創建表 |
size:100000}) 另:可隱式創建表。 | ||
Create INDEX idxname ON users(name) | db.users.ensureIndex({name:1}) | 創建索引 |
Create INDEX idxname ON users(name,ts DESC) | db.users.ensureIndex({name:1,ts:-1}) | 創建索引 |
Insert into users values(1, 1) | db.users.insert({a:1, b:1}) | 插入記錄 |
Select a, b from users | db.users.find({},{a:1, b:1}) | 查詢表 |
Select * from users | db.users.find() | 查詢表 |
Select * from users where age=33 | db.users.find({age:33}) | 條件查詢 |
Select a, b from users where age=33 | db.users.find({age:33},{a:1, b:1}) | 條件查詢 |
select * from users where age<33 | db.users.find({'age':{$lt:33}}) | 條件查詢 |
select * from users where age>33 and age<=40 | db.users.find({'age':{$gt:33,$lte:40}}) | 條件查詢 |
select type, count(type) from series where type like '%series%' group by type; | db.series.group({ key:{type:true}, initial:{num:0}, $reduce:function(doc,prev) { prev.num++ }, condition:{type:/series/} }); |
分組查詢 |
select * from users where a=1 and b='q' | db.users.find({a:1,b:'q'}) | 條件查詢 |
select * from users where a=1 or b=2 | db.users.find( { $or : [ { a : 1 } , { b : 2 } ] } ) | 條件查詢 |
select * from users limit 1 | db.users.findOne() | 條件查詢 |
select * from users where name like "%Joe%" | db.users.find({name:/Joe/}) | 模糊查詢 |
select * from users where name like "Joe%" | db.users.find({name:/^Joe/}) | 模糊查詢 |
select count(1) from users | Db.users.count() | 獲取表記錄數 |
select count(1) from users where age>30 | db.users.find({age: {'$gt': 30}}).count() | 獲取表記錄數 |
select DISTINCT last_name from users | db.users.distinct('last_name') | 去掉重複值 |
select * from users ORDER BY name | db.users.find().sort({name:-1}) | 排序 |
select * from users ORDER BY name DESC | db.users.find().sort({name:-1}) | 排序 |
EXPLAIN select * from users where z=3 | db.users.find({z:3}).explain() | 獲取存儲路徑 |
update users set a=1 where b='q' | db.users.update({b:'q'}, {$set:{a:1}}, false, true) | 更新記錄 |
update users set a=a+2 where b='q' | db.users.update({b:'q'}, {$inc:{a:2}}, false, true) | 更新記錄 |
delete from users where z="abc" | db.users.remove({z:'abc'}) | 刪除記錄 |
db. users.remove() | 刪除所有的記錄 | |
drop database IF EXISTS test; | use test | 刪除數據庫 |
db.dropDatabase() | ||
drop table IF EXISTS test; | db.mytable.drop() | 刪除表/collection |
db.addUser(‘test’, ’test’) | 添加用戶 | |
readOnly-->false | ||
db.addUser(‘test’, ’test’, true) | 添加用戶 | |
readOnly-->true | ||
db.addUser("test","test222") | 更改密碼 | |
db.system.users.remove({user:"test"}) | 刪除用戶 | |
或者db.removeUser('test') | ||
use admin | 超級用戶 | |
db.auth(‘test’, ‘test’) | 用戶授權 | |
db.system.users.find() | 查看用戶列表 | |
show users | 查看所有用戶 | |
db.printCollectionStats() | 查看各collection的狀態 | |
db.printReplicationInfo() | 查看主從複製狀態 | |
show profile | 查看profiling | |
db.copyDatabase('mail_addr','mail_addr_tmp') | 拷貝數據庫 | |
db.users.dataSize() |
查看collection數據的大小 |
|
db. users.totalIndexSize() | 查詢索引的大小 |
db.serverStatus() 顯示數據庫服務信息:詳細解說如下:
基本信息
spock:PRIMARY>db.serverStatus()
{
"host" :"h6.corp.yongche.org", //主機名
"version" :"2.6.2", //mongodb版本
"process" :"mongod", //mongodb進程,主要有mongod和mongos(分片集羣中)兩種
"pid" : NumberLong(4205), //mongod的pid進程號,可用shell的pidof mongod命令驗證
"uptime" : 173120, //mongod服務啓動後到現在已經存活的秒數
"uptimeMillis" :NumberLong(173119573), / /mongod服務啓動後到現在已經存活的毫秒數
"uptimeEstimate" : 172173, //mongod內部計算出來的存活秒數
"localTime" :ISODate("2014-12-31T06:41:01.029Z") //本地時間
鎖信息
Mongodb有4種鎖:r,R,w,W
R:表示全局讀鎖
W:全局寫鎖
r:某個數據庫讀鎖
w:某個數據庫寫鎖
spock:PRIMARY>db.serverStatus().locks
{
"." : {
"timeLockedMicros": {
"R" :NumberLong(2532219), //mongod啓動後所有庫持有全局讀鎖的總微秒數
"W" :NumberLong(2022505) // mongod啓動後所有庫持有全局寫鎖的總微秒數
},
"timeAcquiringMicros": {
"R" :NumberLong(1489378), // mongod啓動後所有庫全局讀鎖的鎖等待的總微秒數
"W" :NumberLong(361350) // mongod啓動後所有庫全局寫鎖的鎖等待的總微秒數
}
},
"admin" : {
"timeLockedMicros": {
"r" :NumberLong(277350), // mongod啓動後admin數據庫持有的讀鎖時間
"w" :NumberLong(0) // mongod啓動後admin數據庫持有的寫鎖時間
},
"timeAcquiringMicros": {
"r" :NumberLong(11011), // mongod啓動後admin數據庫的讀鎖的鎖等待總時間
"w" :NumberLong(0) // mongod啓動後admin數據庫的讀鎖的鎖等待總時間
}
},
"local" : {
"timeLockedMicros": {
"r" :NumberLong(29750564),
"w" :NumberLong(737)
},
"timeAcquiringMicros": {
"r" :NumberLong(4074456),
"w" :NumberLong(46)
}
},
"jiangjianjian" : {
"timeLockedMicros": {
"r" :NumberLong(935802), //mongod啓動後jiangjianjian數據庫持有的讀鎖時間
"w" :NumberLong(98) // mongod啓動後jiangjianjian數據庫持有的寫鎖時間
},
"timeAcquiringMicros": {
"r" :NumberLong(262185), // mongod啓動後jiangjianjian數據庫的讀鎖的鎖等待總時間
"w" : NumberLong(9) // mongod啓動後jiangjianjian數據庫的寫鎖的鎖等待總時間
}
},
"test" : {
"timeLockedMicros": {
"r" :NumberLong(719696),
"w" :NumberLong(141)
},
"timeAcquiringMicros": {
"r" :NumberLong(332797),
"w" :NumberLong(10)
}
}
}
全局鎖信息
spock:PRIMARY>db.serverStatus().globalLock
{
"totalTime" :NumberLong("172059990000"), //mongod啓動後到現在的總時間,單位微秒
"lockTime" :NumberLong(2031058), //mongod啓動後全局鎖鎖住的總時間,單位微秒
"currentQueue" : {
"total" : 0, //當前的全局鎖等待鎖等待的個數
"readers" : 0, //當前的全局讀鎖等待個數
"writers" : 0 //當前全局寫鎖等待個數
},
"activeClients" : {
"total" : 0, //當前活躍客戶端的個數
"readers" : 0, //當前活躍客戶端中進行讀操作的個數
"writers" : 0 //當前活躍客戶端中進行寫操作的個數
}
}
內存信息
bj1-farm1:PRIMARY>db.serverStatus().mem
{
"bits" : 64, //操作系統位數
"resident" : 45792, //物理內存消耗,單位M
"virtual" : 326338, //虛擬內存消耗
"supported" : true, //爲true表示支持顯示額外的內存信息
"mapped" : 161399, //映射內存
"mappedWithJournal" : 322798 //除了映射內存外還包括journal日誌消耗的映射內存
}
關於mongodb內存的介紹可參考我的blog
http://blog.csdn.net/cug_jiang126com/article/details/42264895
連接數信息
bj1-farm1:PRIMARY>db.serverStatus().connections
{
"current" : 2581, //當前連接數
"available" : 48619, //可用連接數
"totalCreated" :NumberLong(187993238) //截止目前爲止總共創建的連接數
}
可看到當前mongod的最大連接數即爲51200=2581+48619
額外信息
bj1-farm1:PRIMARY>db.serverStatus().extra_info
{
"note" : "fields vary byplatform", //表示當前這個extra_info的顯示信息依賴於底層系統
"heap_usage_bytes" :206033064, //堆內存空間佔用的字節數,僅linux適用
"page_faults" : 11718117 //數據庫訪問數據時發現數據不在內存時的頁面數量,當數據庫性能很差或者數據量極大時,這個值會顯著上升
}
索引統計信息
bj1-farm1:PRIMARY>db.serverStatus().indexCounters
{
"accesses" : 35369670951, //索引訪問次數,值越大表示你的索引總體而言建得越好,如果值增長很慢,表示系統建的索引有問題
"hits" : 35369213426, //索引命中次數,值越大表示mogond越好地利用了索引
"misses" : 0, //表示mongod試圖使用索引時發現其不在內存的次數,越小越好
"resets" : 0, //計數器重置的次數
"missRatio" : 0 //丟失率,即misses除以hits的值
}
後臺刷新信息
bj1-farm1:PRIMARY>db.serverStatus().backgroundFlushing
{
"flushes" : 171675, //數據庫刷新寫操作到磁盤的總次數,會逐漸增長
"total_ms" : 432943335, //mongod寫數據到磁盤消耗的總時間,單位ms,
"average_ms" :2521.8775884665793, //上述兩值的比例,表示每次寫磁盤的平均時間
"last_ms" : 5329, //當前最後一次寫磁盤花去的時間,ms,結合上個平均值可觀察到mongd總體寫性能和當前寫性能
"last_finished" :ISODate("2014-12-31T07:39:11.881Z") //最後一次寫完成的時間
}
遊標信息
bj1-farm1:PRIMARY>db.serverStatus().cursors
{
"note" : "deprecated,use server status metrics", //表示也可使用b.serverStatus().metrics.cursor命令看看
"clientCursors_size" : 2, //mongodb當前爲客戶端維護的遊標個數
"totalOpen" : 2, //和clientCursors_size一樣
"pinned" : 0, //打開的pinned類型的遊標個數
"totalNoTimeout" : 0, //設置了經過一段不活躍時間以後不設置超時,即參數“ DBQuery.Option.noTimeout”值以後,打開的遊標個數
"timedOut" : 11 //從mongod啓動以來的遊標超時個數,如果這個值很大或者一直在增長,可能顯示當前應用程序有錯誤
}
網絡信息
bj1-farm1:PRIMARY>db.serverStatus().network
{
"bytesIn" :NumberLong("1391919214603"), //數據庫接收到的網絡傳輸字節數,可通過該值觀察是否到了預計的期望值
"bytesOut" :NumberLong("1669479449423"), //從數據庫發送出去的網絡傳輸字節數
"numRequests" : 5186060375 //mongod接收到的總的請求次數
}
副本集信息
bj1-farm1:PRIMARY>db.serverStatus().repl
{
"setName" :"bj1-farm1", //副本集名稱
"setVersion" : 4, //當前版本,每修改一次配置會自增1
"ismaster" : true, //當前節點是否爲master
"secondary" : false, //當前節點是否爲slave
"hosts" : [ //副本集組成
"172.16.0.150:27017",
"172.16.0.152:27017",
"172.16.0.151:27017"
],
"primary" : "172.16.0.150:27017", //master所在的ip地址
"me" :"172.16.0.150:27017" //當前節點的ip地址
}
關於更多的副本集管理和介紹詳見我的blog
http://blog.csdn.net/cug_jiang126com/article/details/41943237
副本集的操作計數器
bj1-farm1:PRIMARY>db.serverStatus().opcountersRepl
{
"insert" : 599, // mongod replication最近一次啓動後的insert次數
"query" : 0,
"update" : 0,
"delete" : 0,
"getmore" : 0,
"command" : 0
}
操作計數器
bj1-farm1:PRIMARY>db.serverStatus().opcounters
{
"insert" : 17476744, //mongod最近一次啓動後的insert次數
"query" : 4923585, // mongod最近一次啓動後的query次數
"update" : 445136, // mongod最近一次啓動後的update次數
"delete" : 301953, // mongod最近一次啓動後的delete次數
"getmore" : 28737548, // mongod最近一次啓動後的getmore次數,這個值可能會很高,因爲子節點會發送getmore命令,作爲數據複製操作的一部分
"command" : 32844821 //// mongod最近一次啓動後的執行command命令的次數
}
Asserts
bj1-farm1:PRIMARY>db.serverStatus().asserts
{
"regular" : 65, //服務啓動後正常的asserts錯誤個數,可通過log查看更多該信息
"warning" : 1, //服務啓動後的warning個數
"msg" : 0, //服務啓動後的message assert個數
"user" : 30655213, //服務啓動後的user asserts個數
"rollovers" : 0 //服務啓動後的重置次數
}
writeBacksQueued
bj1-farm1:PRIMARY>db.serverStatus().writeBacksQueued
false //如果爲true表示有需要被重新執行的操作,如果爲false表示沒有
持久化(dur)
bj1-farm1:PRIMARY>db.serverStatus().dur
{
"commits" : 29, //上次分組提交間隔之後,寫入journal的commit的次數
"journaledMB" : 1.089536, //上次分組提交間隔之後,寫入journal的大小,單位M
"writeToDataFilesMB" :2.035345, //上次分組提交間隔之後,從journal寫入到數據文件的大小
"compression" : 0.49237888647866956,//journal日誌的壓縮率
"commitsInWriteLock" : 0, //提交的時候有寫鎖的次數,可以用該值判斷當前系統的寫壓力
"earlyCommits" : 0, //在分組提交間隔前,請求commit的次數。用這個值可以判斷分組提交間隔,即 journal group commitinterval設置得是否合理
"timeMs" : {
"dt" : 3060, //收集數據所花的時間,單位ms
"prepLogBuffer" :7, //準備寫入journal所花的時間,單位ms,該值越小表示journal性能越好
"writeToJournal" :36, //真正寫入journal所花的時間,單位ms,該值和文件系統和硬件設備有關
"writeToDataFiles": 34, //從journal寫入到數據文件所花的時間,單位ms
"remapPrivateView": 18 //重新映射內存所花的時間,單位ms,值越小表示journal性能越好
}
}
如果設置了分組提交間隔時間,該項還會在後面顯示journalCommitIntervalMs信息,即提交間隔,默認100ms。
記錄狀態信息
bj1-farm1:PRIMARY>db.serverStatus().recordStats
{
"accessesNotInMemory" :4444249, //訪問數據時發現不在內存的總次數
"pageFaultExceptionsThrown" :22198, //由於頁面錯誤而拋出異常的總次數
"yc_driver" : {
"accessesNotInMemory": 53441,
"pageFaultExceptionsThrown": 18067
},
"yc_foot_print" : {
"accessesNotInMemory": 0,
"pageFaultExceptionsThrown": 0
}
工作集配置
bj1-farm1:PRIMARY>db.serverStatus( { workingSet: 1 } ).workingSet
{
"note" :"thisIsAnEstimate", //註釋
"pagesInMemory" : 736105, //overseconds時間內在內存中的頁的數量,默認頁大小4k;如果你的數據集比內存還小,那麼該值換算成大小就是數據集的大小;可以用該 值評估實際工作集的大小
"computationTimeMicros" : 232590, //收集working set數據所花的時間,單位微秒,收集這些信息會影響服務器性能,請注意收集working set的頻率
"overSeconds" : 502 //內存中從最新數據變到最舊的數據頁之間的所花的時間,單位秒。如果該值正在減少,或者值很小,表示working set已經遠大於內存值;如 果該值很大,表示data set <=內存值
}
metrics
bj1-farm1:PRIMARY>db.serverStatus().metrics
{
"cursor" : { //遊標的信息在上面已經介紹過
"timedOut" :NumberLong(12),
"open" : {
"noTimeout": NumberLong(0),
"pinned" :NumberLong(0),
"total" : NumberLong(2)
}
},
"document" : {
"deleted" :NumberLong(4944851), //刪除記錄的總條數
"inserted" :NumberLong(1066509660), //插入記錄的總條數
"returned" :NumberLong("4594388182"), //返回記錄的總條數
"updated" :NumberLong(27275088) //更新記錄的總條數
},
"getLastError" : {
"wtime" : {
"num" : 0, //w>1的getlasterror次數
"totalMillis": 0 //時間
},
"wtimeouts" :NumberLong(0) //超時個數
},
這部分詳細參考官方文檔
http://docs.mongodb.org/manual/reference/command/getLastError/#dbcmd.getLastError
http://docs.mongodb.org/manual/reference/command/serverStatus/#metrics
"operation" : {
"fastmod" : NumberLong(23990485), //使用$inc操作增加數據記錄,而且該列沒有使用索引的update次數
"idhack" : NumberLong(0), //使用_id列進行查詢的次數,這是mongodb會默認使用_id索引並且跳過查詢計劃解析
"scanAndOrder" :NumberLong(33042) //無法使用索引進行排序的次數
},
"queryExecutor" : {
"scanned" : NumberLong("334236661328319"),//查詢或查詢計劃中掃描的總行數
"scannedObjects" :NumberLong("776725143947") //
},
"record" : {
"moves" :NumberLong(44166) //文檔在硬盤上的移動總次數
},
"repl" : {
"apply" : {
"batches": {
"num": 162, //副本集中slave節點的oplog應用進程個數
"totalMillis": 14 //mongod從oplog中操作所花的總時間
},
"ops" :NumberLong(599) //oplog操作的總個數
},
"buffer" : {
"count" :NumberLong(0), //oplog buffer中的當前操作個數
"maxSizeBytes": 268435456, //oplog buffer的最大值,常量,不可再配置
"sizeBytes": NumberLong(0) //當前oplog buffer的大小
},
"network" : {
"bytes" :NumberLong(282864), //從複製源總讀取的數據量總大小
"getmores": {
"num": 164, //執行getmores操作的個數
"totalMillis": 15595 //getmores操作所花的總時間
},
"ops" :NumberLong(599), //從複製源中讀取的操作總次數
"readersCreated" : NumberLong(12) //oplog查詢線程創建的個數,當發送connection,timeout,或者網絡操作,重新選擇複製源,該值都會增加
},
"preload" : {
"docs" : {
"num": 0,
"totalMillis": 0
},
"indexes": {
"num": 2396,
"totalMillis": 0
}
}
},
"storage" : {
"freelist" : {
"search" :{
"bucketExhausted": NumberLong(0),
"requests": NumberLong(1091000085),
"scanned": NumberLong(1139483866)
}
}
},
"ttl" : {
"deletedDocuments": NumberLong(1015082231), //使用了ttl索引的次數
"passes" :NumberLong(174032) //後天使用ttl索引刪除文檔的次數
}
}