06 February 2014
這篇要講如何Backup和Restore MongoDB,
MongoDB本身提供了2種不同的backup/restore solutions,

  • mongoexport/mongoimport
  • mongodump/mongorestore

還有一些進階的,像是MongoDB Management Service (MMS)
但這裡只介紹這2種比較基本的solutions,
那麼這兩種的差異在哪呢?
第一種的mongoexport/mongoimport其實不太算是backup/restore solution,
因為它只能用來backup collection中的data(collection可以想成relational database的table),
它無法backup整個db的狀態,
在官網中也說明了,
mongoexport/mongoimport在保存BSON上是不可靠的,
所以mongoexport/mongoimport比較適合用在保存簡單的data,
但也可以勉強算是比較簡易型的backup/restore solution,
但儘量別拿來作為backup/restore的方式.原因前面說過了,
把它方法當作data的export和import就好.
如果想要備份較完整的db,那麼就要靠第二種mongodump/mongorestore,
下面分別是這兩種的使用方式.

1. mongoexport/mongoimport

1-1.Backup
mongoexport -h <Host:Port> -d <DB_Name> -c <Collection_Name> -u <DB_User> -p <DB_Password> -o <Output_File_Name>

-h:你的db uri和port number
-d:你要備份的database名稱
-c:要備份哪一個collection(table)
-u:db帳號
-p:db密碼
-o:要備份出來的檔案名稱

1-2. Restore
備份成功以後,你可以試著drop那個collection,
接著在輸入下面的command,應該就會recover成功.
mongoimport -h <Host:Port> -d <DB_Name> -c <Collection_Name> -u <DB_User> -p <DB_Password> --file <File_Name>

參數大部分和backup一樣,
只有--file不同,
--file要接的是剛剛備份出來的檔案名稱,
輸入以後,看到下圖就代表recover成功了




2. mongodump/mongorestore

2-1.Backup
mongodump -h <Host:Port> -d <DB_Name> -c <Collection_Name> -u <DB_User> -p <DB_Password> -o <Directory>

參數也和上面一樣,
但-o是要接目錄位置,mongodump會在該目錄底下建立一個folder來存backup的檔案,

2-2. Restore
mongorestore -h <Host:Port> -d <DB_Name> -c <Collection_Name> -u <DB_User> -p <DB_Password> <Directory>

參數也一樣,
但少了-o,
請在後面直接接上存放backup db的directory.
輸入以後,
你會發現mongorestore不只會幫你recover data,連該collection原有的index也會幫你建好.



結論,
第一種儘量別拿來做backup/restore,其實就連MongoDB官網也沒有把mongoimport/mongoexport歸類在backup/restore的類別下,
就把第一種當作data的export吧!
第二種就是完整的backup/restore solution,就像mysqldump一樣!















blog comments powered by Disqus