備份 docker 容器內(nèi)的 mongo數(shù)據(jù)庫(kù)
前言
之前自己寫了一個(gè)個(gè)人博客,整體技術(shù)棧為:Vue + node + mongo,之前就是一個(gè)小白,啥也不懂沒有設(shè)置權(quán)限,也沒有修改端口,也沒有限制遠(yuǎn)程登錄host......
突然有一天,發(fā)現(xiàn)數(shù)據(jù)全部沒有了(被黑):

后面小白不斷成長(zhǎng),摸索出了 jenkins + docker 實(shí)現(xiàn)了自動(dòng)構(gòu)建和部署,其中 mongo 被我部署進(jìn)了 docker 容器
現(xiàn)在有個(gè)問題,我想定期的去備份數(shù)據(jù),以備不時(shí)之需
人力備份
什么叫人力備份,就是手工的把 mongo 容器內(nèi)的數(shù)據(jù)備份,流程:
進(jìn)入 mongo 容器,備份數(shù)據(jù) 拷貝 mongo 容器的數(shù)據(jù)到宿主機(jī)機(jī)器
1. mongo 容器內(nèi)備份數(shù)據(jù)
docker images

docker exec -it 3dcf2168ed94 sh

# 導(dǎo)出 blog 數(shù)據(jù)庫(kù) 到當(dāng)前目錄
mongodump -h localhost:27017 -d blog -o ./

exit
2. 拷貝容器數(shù)據(jù)到宿主機(jī)
# 拷貝 3dcf2168ed94容器內(nèi)的 /root/blog => 當(dāng)前目錄(宿主機(jī)器)
docker cp 3dcf2168ed94:/root/blog ./
自動(dòng)備份
1. 自動(dòng)掛載
# docker-compose.yml
# 宿主機(jī)的 /root/blog-backend/data 映射到 容器內(nèi)的 /data/db
/root/blog-backend/data:/data/db

2. 定時(shí)任務(wù)備份數(shù)據(jù)
# /app/schedule/backup.ts
export default class BackUp extends Subscription {
static get schedule() {
return {
interval: '1d', # 每天備份一次
type: 'all',
};
}
async subscribe() {
try {
// 備份數(shù)據(jù)
} catch (e) {
console.log(e);
this.ctx.logger.error(`${new Date()}:備份數(shù)據(jù)失敗`);
}
}
}


評(píng)論
圖片
表情


