2015年1月22日 星期四

5.備份及還原MongoDB(mongodump , mongorestore)


MongoDB提供了2個指令 mongodump , mongorestore 來完成我們日常的備份及還原操作。
這2個指令基本上是以 db 為單位的,如果要單一備份一個Collection的話,可以 mongoexport 指令來完成;當然mongodump加上 c 參數也可以,不過我覺得還是區別化的使用可能比較好。今天主要介紹mongodump , mongorestore為主,這2個指令都存在於Mongo的資料夾的Bin目錄中。

備份資料庫 ( Mongodump )

mongodump基本的運作原理是先執行查詢動作之後,並把所有查詢結果寫入硬碟中,但問題出現了因為基本上可能有很多文檔資料還在記憶體中未寫入硬碟中,或是你在執行備份的同時仍可能有很多新增、修改操作也正在運行中,這時侯你dump出來的資料就非常可能是一個不完整備份,在本文的最後會紅有推荐的方式來處理這一個問題,我們先下看一下如何基本的使用mongodump先。

執行 mongodump --help 列出所有參數說明,如下圖




常用的參數:

-h:         host,表示資料庫主機的IP位置或是電腦名稱
-u:         user,登入的帳號
-p:         password,登入的密碼
--port:  指定port號
-d:        database,備份資料庫的名稱
-c:        collection,指定備份某一個Collection
-o:        output備份輸出的磁碟位置(Folder Path)
-q:        query,備份的過濾條件(基本上我沒有使用過這一個參數 ^ ^ )


使用範列

  • 我要備份本機的mydb的全部資料,則可以使用以下指令
    • mongodump -d mydb -o ../data/backup
  • 我要備份遠端的資料庫的話,就要加入 -h , -u , -p , --port 等參數,可能的指令如下
    • mongodump -h myserver2 --port 37017 -u myname -p xxxx -d mydb -o ../data/backup


★會紅比較推荐的備份方式:


在備份前先執行 fsynclock 指令,讓在記憶體中的資料同步到磁碟中,並且先把這一個資料庫上鎖,防止寫入的操作,再執行備份操作,最後一定要記得解鎖,雖然同步是多了一點但可以確保資料庫的完整性。

1.先切換到admin資料庫中
   use admin

2.執行磁碟同步與上鎖工作
   db.runCommand({fsync:1,lock:1})




3.查看一下是不是真的上鎖了
   db.currentOp()


4.先開出另一個console視窗來執行備份操作,如下圖

5.備份完成後記得要解鎖

db.fsyncUnlock()




還原資料庫 ( Mongorestore )

mongorestore的參數跟mongodump參數差不多,有一個比較要特別注意就是 --drop
我們先使用mongorestore --help 列出所有的參數列表




注意: --drop 參數表示在還原操作前會先把每一個collection先刪除,一般的狀態之下是要加入這一個參數。


還原範例:

mongorestore -d yourDataBaseName --drop d:/backup/yourDataBaseName 




今天的內容比較容易我應該可以不用錄製教學視頻吧,^ ^ … 。

沒有留言:

張貼留言