1. 程式人生 > >MongoDB在linux上的基本操作

MongoDB在linux上的基本操作

MongoDB在linux上的基本操作

一、mongodb/bin下的命令

在這裡插入圖片描述

1.登入

mongo
登入結果

2.mongostat狀態檢測

mongostat是mongdb自帶的狀態檢測工具,在命令列下使用。
間隔固定時間獲取mongodb的當前執行狀態,並輸出。
預設是每秒重新整理一次狀態
如果你發現數據庫突然變慢或者有其他問題的話,你第一手的操作就考慮採用mongostat來檢視mongo的狀態。

1)語法

mongostat
mongostat --host 127.0.0.1:27017 -uroot -p123456 --authenticationDatabase admin

2)結果

在這裡插入圖片描述

引數 說明
insert 每秒插入次數
query 每秒查詢次數
update 每秒更新次數
delete 每秒刪除次數
getmore 每秒執行getmore次數
command 每秒的命令數,比以上插入、查詢、更新、刪除的綜合還多,還統計了別的命令
注: 一秒內執行的命令數比如批量插入,只認為是一條命令(所以意義應該不大)
dirty 僅僅針對WiredTiger引擎,官網解釋是髒資料位元組的快取百分比
used 僅僅針對WiredTiger引擎,官網解釋是正在使用中的快取百分比
flushes For WiredTiger引擎:指checkpoint的觸發次數在一個輪詢間隔期間
For MMAPv1 引擎:每秒執行fsync將資料寫入硬碟的次數
注:一般都是0,間斷性會是1, 通過計算兩個1之間的間隔時間,可以大致瞭解多長時間flush一次。
flush開銷是很大的,如果頻繁的flush,可能就要找找原因了
vsize 虛擬記憶體使用量,單位MB
(這是 在mongostat 最後一次呼叫的總資料)
res 實體記憶體使用量,單位MB
(這是 在mongostat 最後一次呼叫的總資料)
注:vsize一般不會有大的變動, res會慢慢的上升,如果res經常突然下降,去查查是否有別的程式狂吃記憶體
qr|qw qr:客戶端等待從MongoDB例項讀資料的佇列長度
qw:客戶端等待從MongoDB例項寫入資料的佇列長度
ar|aw ar:執行讀操作的活躍客戶端數量
aw:執行寫操作的活客戶端數量
netIn 網路頻寬壓力,MongoDB例項的網路進流量
netOut 網路頻寬壓力,MongoDB例項的網路出流量
conn 開啟連線的總數,是qr,qw,ar,aw的總和
注:MongoDB為每一個連線建立一個執行緒,執行緒的建立與釋放也會有開銷,所以儘量要適當配置連線數的啟動引數,maxIncomingConnections,阿里工程師建議在5000以下,基本滿足多數場景
time 時間戳

3.mongotop狀態檢測

1)語法

mongotop
mongotop–host 127.0.0.1:27017 -uroot -p123456 --authenticationDatabase admin

2)結果

在這裡插入圖片描述

引數 說明
ns 表示namespace,由庫名和集合名稱構成
db 庫名,使用–locks顯示
total 讀操作和寫操作總計耗時,以ms表示
read 讀操作耗時
write 寫操作耗時

二、資料庫操作

資料庫的幫助文件

db.adminCommand(nameOrDocument)// 切換到admin資料庫,並且執行命令 
db.AddUser(username,password[, readOnly=false])  //新增使用者   `
db.auth(usrename,password)     // 設定資料庫連線驗證  
db.cloneDataBase(fromhost)     // 從目標伺服器克隆一個數據庫  
db.commandHelp(name)           // returns the help for the command  
db.copyDatabase(fromdb,todb,fromhost)  // 複製資料庫fromdb---源資料庫名稱,todb---目標資料庫名稱,fromhost---源資料庫伺服器地址  
db.createCollection(name,{size:3333,capped:333,max:88888})  // 建立一個數據集,相當於一個表  
db.createView(name, viewOn, [ { $operator: {...}}, ... ], { viewOptions } ) // 建立檢視
db.createUser(userDocument)    // 建立使用者
db.currentOp()                 // 取消當前庫的當前操作  
db.dropDataBase()              // 刪除當前資料庫  
db.eval(func,args)             // (已過時) run code server-side  
db.fsyncLock()                 // 將資料儲存到硬碟並且鎖定伺服器備份
db.fsyncUnlock() unlocks server following a db.fsyncLock()
db.getCollection(cname)        // 取得一個數據集合,同用法:db['cname'] or db.cname
db.getCollenctionNames()       // 取得所有資料集合的名稱列表  
db.getLastError()              // 返回最後一個錯誤的提示訊息  
db.getLastErrorObj()           // 返回最後一個錯誤的物件  
db.getLogComponents()
db.getMongo()                  // 取得當前伺服器的連線物件get the server  
db.getMondo().setSlaveOk()     // allow this connection to read from then nonmaster membr of a replica pair  
db.getName()                   // 返回當操作資料庫的名稱  
db.getPrevError()              // 返回上一個錯誤物件  
db.getProfilingLevel()         // 獲取profile level  
db.getReplicationInfo()        // 獲得重複的資料  
db.getSisterDB(name)           // get the db at the same server as this onew  
db.killOp()                    // 停止(殺死)在當前庫的當前操作 
db.listCommands()              // lists all the db commands
db.loadServerScripts()         // loads all the scripts in db.system.js
db.logout()
db.printCollectionStats()      // 返回當前庫的資料集狀態  
db.printReplicationInfo()      // 列印主資料庫的複製狀態資訊  
db.printSlaveReplicationInfo() // 列印從資料庫的複製狀態資訊  
db.printShardingStatus()       // 返回當前資料庫是否為共享資料庫  
db.removeUser(username)        // 刪除使用者  
db.repairDatabase()            // 修復當前資料庫  
db.resetError()  
db.runCommand(cmdObj)          // run a database command. if cmdObj is a string, turns it into {cmdObj:1}  
db.runCommand(cmdObj)          // run a database command.  if cmdObj is a string, turns it into { cmdObj : 1 }
db.serverStatus()
db.setLogLevel(level, <component>)
db.setProfilingLevel(level, <slowms>)    // 設定profile level 0=off,1=slow,2=all 
db.setWriteConcern( <write concern doc> ) // sets the write concern for writes to the db
db.unsetWriteConcern( <write concern doc> ) // unsets the write concern for writes to the db
db.setVerboseShell(flag)       // display extra information in shell output
db.shutdownServer()            // 關閉當前服務程式  
db.stats()                     // 返回當前資料庫的狀態資訊
db.version()                   // 返回當前程式的版本資訊

1.檢視資料庫版本

db.version()
在這裡插入圖片描述

2.檢視資料庫狀態

db.stats()
在這裡插入圖片描述

引數 說明
db 當前資料庫
collection 集合的個數
objects 物件的個數, 迴圈每個集合得到的,每個集合的記錄數(nrecords)之和
avgObjSize 平均每個物件的大小, 通過 dataSize / objects 得到
dataSize 每個集合的dataSize之和
storageSize 每個集合的storageSize之和
indexes 索引個數
indexSize 每個索引資料和
fileSize db下面的物理儲存檔案的大小; 物理儲存檔案比實際的資料要大一些,這是是mongo的預分配機制

3.檢視所有資料庫

show dbs

4.檢視當前資料庫

db
db.getName()

5.切換資料庫

use rec

6.檢視當前資料庫的所有集合

show collections

三、集合操作

集合的幫助文件

db.test.find({id:10})          // 返回test資料集ID=10的資料集  
db.test.find({id:10}).count()  // 返回test資料集ID=10的資料總數  
db.test.find({id:10}).limit(2) // 返回test資料集ID=10的資料集從第二條開始的資料集  
db.test.find({id:10}).skip(8)  // 返回test資料集ID=10的資料集從0到第八條的資料集  
db.test.find({id:10}).limit(2).skip(8)  // 返回test資料集ID=1=的資料集從第二條到第八條的資料  
db.test.find({id:10}).sort()   // 返回test資料集ID=10的排序資料集  
db.test.findOne([query])       // 返回符合條件的一條資料  
db.test.getDB()                // 返回此資料集所屬的資料庫名稱  
db.test.getIndexes()           // 返回些資料集的索引資訊  
db.test.group({key:...,initial:...,reduce:...[,cond:...]})    // 返回分組資訊  
db.test.mapReduce(mayFunction,reduceFunction,<optional params>)  // 這個有點像儲存過程  
db.test.remove(query)                      // 在資料集中刪除一條資料  
db.test.renameCollection(newName)          // 重新命名些資料集名稱  
db.test.save(obj)                          // 往資料集中插入一條資料  
db.test.stats()                            // 返回此資料集的狀態  
db.test.storageSize()                      // 返回此資料集的儲存大小  
db.test.totalIndexSize()                   // 返回此資料集的索引檔案大小  
db.test.totalSize()                        // 返回些資料集的總大小  
db.test.update(query,object[,upsert_bool]) // 在此資料集中更新一條資料  
db.test.validate()                         // 驗證此資料集  
db.test.getShardVersion()                  // 返回資料集共享版本號  

1.查詢

db.interface_log.find()
在這裡插入圖片描述