1. 程式人生 > >mongodb服務遷移相關知識整理

mongodb服務遷移相關知識整理

因為遷移專案中用到的mongodb這個資料庫。這裡整理一下。

常用操作
show dbs;
use 資料庫名:
show collections;
db.表名.find()
db.表名.find().count()
db.表名.find().limit(5);查看錶的前5條資料。

狀態檢視: 20秒,每秒更新一次
mongostat -h 127.0.0.1 -p 27017 --rowcount 20 1

上面這些是簡單的檢視。因為資料庫需要遷移,這裡就需要遷移資料和索引。

先不說遷移情況,這次遷移完成之後,mongodb的cpu佔用了特別高,200~300.記憶體佔用不太高。但是另一個正在執行的服務,cpu佔用率卻特別低。這裡網上找了一下,出現類似情況的,都是沒有加索引造成的。我的專案裡面,漏掉了一個配置檔案,而配置檔案相關的索引,也都沒有新增,所以也就出現cpu佔用率超級高的情況。

我遷移資料庫是加索引了呀。但是我沒有找到索引位置。這個時候我懷疑遷移的有問題。其實索引遷過去了,因為我用的版本比較高4.0.4,之前2.6.12的版本,索引是單獨列出來的,裡面有一個system.indexes的表,記錄所有的索引。而現在的表,好像是去掉了system.indexes,所以遷移的時候,明明遷移過去了,但是實際上卻找不到這個。

匯出資料:

一個表:

mongodump --db project --collection 表名 --out 目的路徑

整個庫:

mongodump --db project–out 目的路徑

資料恢復:

一個表:

mongorestore  --db project --collection 表名備份路徑

備份路徑需要指向一個表的.bson檔案,如:

mongorestore  --db project --collection news_cjyw/…/dump/project/news_cjyw.bson

整個庫:

mongorestore  --db project備份路徑

資料匯出——每個表一個檔案:

mongoexport --db project --collection 表名 --out 輸出檔名,如:

mongoexport --db project --collectionstock --out stock.json,匯出所有F10資料到檔案/root/stock.json中

資料匯入——每個表一個檔案:

mongoimport --db users --collection 表名 --file輸入檔名

這裡我補充一點,

如果你使用的是mongoimport 和 mongoexport的方式,索引是必須得自己建的.而mongodump和mongorestore是導資料的時候,自動把索引給導過去。

遷移完服務之後,就需要該加索引的加索引,該優化的優化了。

db.collection_name.ensureIndex(keys[,options])

keys,要建立索引的引數列表。如{key:1},其中key表示欄位名,1表示升序,-1表示降序)

options,可選引數,表示建立索引的設定。可選值如下:
background, Boolean,在後臺建立索引,以便建立索引時不阻止其他資料庫活動,預設值為false.

unique, Boolean, 建立唯一索引。預設值false.
name. String, 指定索引的名稱。如果未指定,MongoDB會生成一個索引欄位的名稱和排序順序串聯。

dropDups, Boolean, 建立唯一索引時,如果出現重複刪除後續出現的相同索引,只保留第一個。

sparse, Boolean,
對文件中不存在的欄位資料不啟用索引,預設值是false.
v, index version, 索引的版本號。
weights, document, 索引權重值,數值在1到99999之間,表示該索引相對於其他索引欄位的得分權重。

example:

> db.sites.ensureIndex({name: 1, domain: -1})
{
  "createdCollectionAutomatically" : false,
  "numIndexesBefore" : 1,
  "numIndexesAfter" : 2,
  "ok" : 1
}

檢視索引:

db.collection_name.getIndexes()

檢視集合中的索引大小totalIndexSize()

db.collection_name.totalIndexSize()

刪除索引:

db.collection_name.dropIndex(“Index_name”)

當然,如果加了索引,還是不管用。這個時候,就需要開啟慢查詢來收集查詢比較慢的資料了。

1:Profiling級別說明

0:關閉,不收集任何資料。
1:收集慢查詢資料,預設是100毫秒。
2:收集所有資料

2:開啟Profiling和設定

1:通過mongo shell:
#檢視狀態:級別和時間
drug:PRIMARY> db.getProfilingStatus()   
{ "was" : 1, "slowms" : 100 }
#檢視級別
drug:PRIMARY> db.getProfilingLevel()    
1
#設定級別
drug:PRIMARY> db.setProfilingLevel(2)
{ "was" : 1, "slowms" : 100, "ok" : 1 }
#設定級別和時間
drug:PRIMARY> db.setProfilingLevel(1,200)
{ "was" : 2, "slowms" : 100, "ok" : 1 }

3:關閉Profiling

# 關閉
drug:PRIMARY> db.setProfilingLevel(0)
{ "was" : 1, "slowms" : 200, "ok" : 1 }

4:修改“慢查詢日誌”的大小


#關閉Profiling
drug:PRIMARY> db.setProfilingLevel(0)
{ "was" : 0, "slowms" : 200, "ok" : 1 }
#刪除system.profile集合
drug:PRIMARY> db.system.profile.drop()
true
#建立一個新的system.profile集合
drug:PRIMARY> db.createCollection( "system.profile", { capped: true, size:4000000 } )
{ "ok" : 1 }
#重新開啟Profiling
drug:PRIMARY> db.setProfilingLevel(1)
{ "was" : 0, "slowms" : 200, "ok" : 1 }

參考:

http://www.cnblogs.com/zhoujinyi/p/3566773.html
https://www.linuxidc.com/Linux/2017-03/141626.htm
https://blog.csdn.net/fanyun_01/article/details/51564567
https://itbilu.com/database/mongo/E1tWQz4_e.html