標籤:
前言
本文主要涉及一下內容:資料庫的備份和恢複,對於任一資料庫來說備份至關重要;資料的匯入和匯出;資料庫修複;資料庫狀態監控工具mongostat;在使用過程遇到其他命令會總結在此。
1.資料庫的備份和恢複
1.1 複製資料檔案
備份:使用此方法時必須保證資料檔案不發生變化,可以使用fsynclock命令,> db.fsyncLock()
一旦運行該命令,就會鎖定資料庫,禁止任何寫入,並進行同步,把資料刷到磁碟。當命令返回後,就可以複製資料檔案了,如備份名為myDB的資料庫,只需複製所有名為myDB.*的檔案,如果使用了—directoryperdb選項,只需複製該資料庫對應的整個資料目錄。複製完成後,使用> db.fsyncUnlock()解鎖資料庫。
注意:如果啟用了身分識別驗證,那麼,在調用fsyncLock和fsyncUnlock期間不要關閉shell否則只能重啟mongod服務了。
恢複:保證mongod服務沒啟動,待恢複目錄為空白,將備份的資料檔案拷貝到資料庫目錄,最後啟動mongod服務即可。
1.2 使用mongodump
使用mongodump可以單獨備份資料庫,集合,只不過備份和恢複的比較慢。可以使用mongodump –help查看可用選項。
備份:
備份整個foo資料庫
mongodump –h 127.0.0.1:30000 –d foo –o /data/dbback/foo
備份foo資料庫中的bar集合
mongodump –h 127.0.0.1:30000 –d foo –c foo.bar –o /data/dbback/foo/bar
備份多個集合,foo中的bar,info集合,使用逗號隔開
mongodump –h 127.0.0.1:30000 –d foo –c foo.bar, foo.infi –o /data/dbback/foo/cols
恢複:
使用mongorestore命令,其中有兩個選項值得一提:
--drop:在恢複前刪除現有集合,否則直接插入現有集合中
--noobjcheck:忽略對象插入集合之前的驗證步驟
恢複單個資料庫
mongorestore –h 127.0.0.1:30000 –d foo –dir /data/dbback/foo
恢複單個集合
mongorestore –h 127.0.0.1:30000 –d foo –c foo.bar –dir /data/dbback/foo/bar
恢複多個集合
mongorestore –h 127.0.0.1:30000 –d foo –c foo.bar,foo.infi –dir /data/dbback/foo /cols
1.3 備份副本集
直接使用複製資料檔案的方式備份,這種方式備份副本集時無需做任何修改。
1.4 備份分區叢集
第一步:關閉均衡器,
第二步:串連mongos執行mongodump備份
第三步:啟用均衡器,
恢複備份的話,使用mongorestore串連到一個mongos執行即可
備份單個分區和備份單個伺服器一樣。
2.資料的匯入和匯出
資料匯入匯出就是兩個命令:mongoimport和mongoexport
mongoimport,可以把CSV, TSV或者JSON格式的資料匯入mongodb,其中幾個有用的選項:
--headerline:對於CSV,TSV格式檔案,使用第一行作為欄位名稱
--drop:匯入前刪除集合,否則追加集合後面
--ignoreblanks:不匯入空欄位
mongoimport –h 127.0.0.1:30000 –d foo –c foo.bar –type csv –headerline < csvfile
mongoexport,可以把mongodb資料匯出JSON,CSV格式的檔案。其中幾個有用的選項:
--q:指定查詢條件匯出資料,預設為{}
--f:指定匯出的欄位名稱
mongoexport –h 127.0.0.1:30000 –d foo –c foo.bar –q {} –type=csv > bar.csv
3.資料庫狀態監控
使用mongostat預設每一秒輸出服務目前狀態,輸出主要欄位說明表,使用方法mongostat –port 30000。
使用db.currentOp()可以查看資料庫當前執行的操作有哪些。
表1 mongostat欄位說明
insert |
每秒插入的次數 |
query |
每秒查詢的次數 |
update |
每秒更新的次數 |
delete |
每秒刪除的次數 |
getmore |
每秒查詢遊標getmore次數 |
command |
每秒執行的命令樹,除增刪改查,還有其它統計命令 |
flushes |
每秒執行fsync將資料寫入磁碟的次數 |
mapped |
所有被mmap映射進記憶體的資料量,單位M |
vsize |
虛擬記憶體使用量,單位M |
res |
實體記憶體使用量,單位M |
faults |
每秒訪問失敗的次數,當faults居高不下時,一般是以下幾個原因: 1. 磁碟空間不足 2. 記憶體不足 3. 磁碟IO達到瓶頸 |
qr|qw |
表示讀,寫隊列,高並發時隊列的值一般會升高 |
ar|aw |
表示活躍的讀,寫用戶端數 |
netIn |
每秒通過網路輸入的位元組數 |
netOut |
每秒通過網路輸出的位元組數 |
conn |
伺服器開啟的串連數,包括輸入和輸出串連 |
MongoDB-伺服器管理