備份與恢複是資料儲存的重要技術。本次只是學習記錄單機的操作。
mongodb的備份和恢複提供了兩種方式。備份為bson格式和和備份為json和csv格式。
a)匯出bson格式
主要用於單機小資料量的備份、快照等。儲存被bson格式,bson(Binary JSON ),
是輕量級的位元據格式。
備份命令mongodump
參數
--help 協助資訊
-v [ --verbose ] be more verbose (include multiple times for more
verbosity e.g. -vvvvv)
-h [ --host ] arg 指定要備份的伺服器ip
--port arg 指定要備份的伺服器連接埠,需要與伺服器ip一起使用,格式為ip:port
--ipv6 開啟ipv6的支援,預設是關閉的
-u [ --username ] arg 使用者名稱
-p [ --password ] arg 密碼
--dbpath arg 指定串連資料庫後訪問資料的位置,但是不能是當前使用的目錄
--directoryperdb 為每一個庫建立一個目錄。
-d [ --db ] arg 指定要備份的庫名
-c [ --collection ] arg 指定要匯出的collection
-o [ --out ] arg (=dump) 輸出的目錄,預設目錄為執行命令的路徑下建立dump目錄
-q [ --query ] arg 可以json查詢,有選擇性的匯出資料
--oplog 使用oplog
--repair 嘗試修複損壞的資料庫
恢複命令mongorestore
參數
--help 協助資訊
-v [ --verbose ] be more verbose (include multiple times for more
verbosity e.g. -vvvvv)
-h [ --host ] arg 指定要匯入的伺服器ip
--port arg 指定要匯入的伺服器連接埠,需要與伺服器ip一起使用,格式為ip:port
--ipv6 開啟ipv6的支援,預設是關閉的
-u [ --username ] arg 使用者名稱
-p [ --password ] arg 密碼
--dbpath arg 指定串連資料庫後訪問資料的位置,但是不能是當前使用的目錄
--directoryperdb 為每一個庫建立一個目錄。
-d [ --db ] arg 指定要備份的庫名
-c [ --collection ] arg 指定要匯出的collection
--objcheck 插入前檢測對象的合法性
--filter arg 插入前的過濾器
--drop 在匯入前刪除要匯入的集合
--oplogReplay 恢複日誌時間點
測試,首先查看要測試的資料庫(mytest)檔案大寫
> show dbs
admin (empty)
mytest 1.953125GB
開始備份,將本地mytest庫匯出到tmp目錄下
# mongodump -d mytest -o /tmp
匯出結束耗時如下
real 0m5.412s
user 0m0.007s
sys 0m2.039s
匯出後資料存為bson格式體積為577M。mytest庫裡存的是MP3所以匯出資料庫壓縮的不多。
開始做恢複測試,首先刪除mytest庫,在匯入
# mongorestore --directoryperdb -d mytest /tmp/mytest
匯入結束耗時如下:
real 0m52.587s
user 0m0.514s
sys 0m1.732s
總結:匯入時間大約是匯出時間的10倍。
b)匯出json格式
雖然匯出速度快,但是匯出為json,csv可能對某些資料類型不相容,並且不保證資料可以完整匯入。
所以只簡單記錄一下,就不是實驗了。
匯出命令mongoexport
參數
-q [ --query ] arg query filter, as a JSON string
--csv export to csv instead of json
--jsonArray output to a json array rather than one object per
line
恢複命令mongoimport
參數
--ignoreBlanks 在csv,tsv檔案中忽略空域
--type arg 指定匯入檔案的類型,預設為json,也可以是csv,tsv
--drop 匯入前先刪除原collection
--headerline 僅匯入CSV,TSV檔案的第一行作為標頭檔
--upsert 插入或更新已存在的對象
--upsertFields arg comma-separated fields for the query part of the
upsert. You should make sure this is indexed
--stopOnError 當匯入出現錯誤時停止
--jsonArray 匯入json array,目前每個array的限制是4M