一、準備工作
安裝MongoDB工具包
在Ubuntu上,mongodump(備份)和mongorestore(恢復)工具包含在mongodb-tools包中。若未安裝,可通過以下命令安裝:
sudo apt update
sudo apt install mongodb-tools
確認MongoDB服務狀態
備份/恢復前需確保MongoDB服務正在運行:
sudo systemctl start mongod # 啟動服務
sudo systemctl enable mongod # 設置開機自啟
sudo systemctl status mongod # 檢查狀態(顯示"active (running)"即為正常)
二、MongoDB備份操作
使用mongodump備份數據
mongodump是MongoDB自帶的全量備份工具,支持備份整個實例、特定數據庫或集合。
/backup/mongodb_$(date +%Y%m%d),按日期命名便于管理):sudo mkdir -p /backup # 創建備份目錄(可選)
sudo mongodump --out /backup/mongodb_$(date +%Y%m%d)
mydb):sudo mongodump --db mydb --out /backup/mongodb_$(date +%Y%m%d)
mydb中的users集合):sudo mongodump --db mydb --collection users --out /backup/mongodb_$(date +%Y%m%d)
壓縮備份文件
為節省存儲空間,可使用tar命令壓縮備份目錄:
sudo tar -czvf /backup/mongodb_backup_$(date +%Y%m%d).tar.gz /backup/mongodb_$(date +%Y%m%d)
壓縮后可通過ls -lh命令查看壓縮包大小,確認節省空間效果。
自動化定期備份(可選)
使用cron定時任務實現每日自動備份(如凌晨2點):
crontab -e
0 2 * * * sudo mkdir -p /backup && sudo mongodump --out /backup/mongodb_$(date +\%Y\%m\%d) && sudo tar -czvf /backup/mongodb_backup_$(date +\%Y\%m\%d).tar.gz /backup/mongodb_$(date +\%Y\%m\%d) && sudo find /backup -name "mongodb_backup_*.tar.gz" -mtime +7 -exec rm {} \;
三、MongoDB恢復操作
停止MongoDB服務(可選但推薦)
恢復前停止服務可避免數據沖突(若為生產環境,建議在低峰期操作):
sudo systemctl stop mongod
使用mongorestore恢復數據
mongorestore是mongodump的配套恢復工具,支持恢復整個實例、特定數據庫或集合。
/backup/mongodb_20250930)中的所有數據庫恢復到MongoDB實例:sudo mongorestore /backup/mongodb_20250930
mydb):sudo mongorestore --db mydb /backup/mongodb_20250930/mydb
mydb中的users集合):sudo mongorestore --db mydb --collection users /backup/mongodb_20250930/mydb/users.bson
--drop選項):sudo mongorestore --drop --db mydb /backup/mongodb_20250930/mydb
啟動MongoDB服務
恢復完成后,啟動MongoDB服務以恢復正常訪問:
sudo systemctl start mongod
驗證恢復結果
使用mongo shell連接MongoDB,檢查數據是否恢復成功:
mongo # 進入mongo shell
use mydb # 切換到目標數據庫
db.users.find() # 查詢目標集合(如users)的數據
若能正常查詢到備份時的數據,則說明恢復成功。
四、注意事項
sudo提升權限(如sudo mongodump)。mongorestore --dryRun模擬恢復過程,檢查備份文件的完整性(不會實際恢復數據)。openssl等工具加密備份文件(如tar -czvf - /backup | openssl enc -aes-256-cbc -salt -out /backup/encrypted.tar.gz.enc)。