前言
前陣子使用 ssr 重構(gòu)了博客,需要對之前的舊數(shù)據(jù)進行備份,之前的做法是直接把mongo/data目錄下的所有文件進行備份...... (沒錯我之前就是這么干的.)
最近研究了一下,有兩種方法可以備份 mongo 數(shù)據(jù)庫
如下圖,有一個 blog 數(shù)據(jù)庫,我們下面開始對其進行備份

1. mongodump、mongorestore
? mongodump 是 MongoDB 官方提供的備份工具,它可以從 MongoDB 數(shù)據(jù)庫讀取數(shù)據(jù),并生成 BSON 文件,mongodump 適合用于備份和恢復數(shù)據(jù)量較小的 MongoDB 數(shù)據(jù)庫,不適用于大數(shù)據(jù)量備份。
備份
語法如下,注意有幾個參數(shù):
- -h:MongDB所在服務(wù)器地址,如 localhost:27017
- -d:備份的數(shù)據(jù)庫
- -c:備份的數(shù)據(jù)表
- -o:備份的數(shù)據(jù)存放位置
mongodump -h dbhost -d dbname -o dbdirectory
我們直接運行命令:
# 導出 blog 數(shù)據(jù)庫 到當前目錄
mongodump -h localhost:27017 -d blog -o ./
# 也可以導出特定表
# 導出 blog 數(shù)據(jù)庫的 articles 表 到當前目錄
mongodump -h localhost:27017 -c articles -d blog -o ./

執(zhí)行完畢,我們點開blog目錄發(fā)現(xiàn),下面有后綴為 bson、json的文件,輸出一個bson文件看,發(fā)現(xiàn)是亂碼:
cat articles.bson

其實我們備份的數(shù)據(jù)都是二進制的,我們直接查看不到的,需要結(jié)合 mongo 自帶的 bsondump :
bsondump .\articles.bson

emmm,可以正常查看了
恢復
和備份差不多:
- -h:MongDB所在服務(wù)器地址,如 localhost:27017
- -d:需要恢復的數(shù)據(jù)庫
- -c:需要恢復的數(shù)據(jù)表
- <path>:mongorestore 最后的一個參數(shù),備份數(shù)據(jù)所在位置
>mongorestore -h <hostname><:port> -d dbname <path>
我們先把 blog 數(shù)據(jù)庫刪除,然后開始恢復
# 恢復 blog 數(shù)據(jù)庫的所有表
mongorestore -h localhost:27017 -d blog ./
# 當然你也可以只恢復特定的表
# 比如,只恢復 articles 表
mongorestore -h localhost:27017 -c articles -d blog ./articles.bson

執(zhí)行,所有數(shù)據(jù)已恢復~
2. mongoexport、mongoimport
Mongodb中 的 mongoexport 工具可以把一個 collection 導出成 JSON 格式或 CSV 格式的文件。
mongoexport 只能一個一個表導出,額.......

導出
mongoexport 的使用和參數(shù)基本和 mongodump 一樣:
- -h:MongDB所在服務(wù)器地址,如 localhost:27017
- -d:備份的數(shù)據(jù)庫
- -c:備份的數(shù)據(jù)表
- -o:備份的數(shù)據(jù)存放位置,必須指定存放類型,如 json、csv
# 導出 blog 數(shù)據(jù)庫的 articles 表
mongoexport -h localhost:27017 -d blog -c articles -o ./articles.json
mongoexport -h localhost:27017 -d blog -c articles -o ./articles.csv

恢復
- -h:MongDB所在服務(wù)器地址,如 localhost:27017
- -d:恢復的數(shù)據(jù)庫
- -c:恢復的數(shù)據(jù)表
- <path>:mongorestore 最后的一個參數(shù),備份數(shù)據(jù)所在位置
# 從json導入
mongoimport -h localhost:27017 -d blog -c articles ./articles.json
# 從csvf導入
mongoimport -h localhost:27017 -d blog -c articles ./articles.csv

恢復成功~
END