docker安裝mongodb並備份


安裝

官方鏡像地址: https://hub.docker.com/_/mongo?tab=description

可以查看對應的dockerfile, 通過觀察docker-entrypoint.sh可以看出,docker版的mongo移除了默認的/etc/mongo.conf, 修改了db數據存儲路徑為 /data/db.

 docker run  \
--name mongod \
-p 27017:27017  \
-v /data/opt/mongodb/data/configdb:/data/configdb/ \
-v /data/opt/mongodb/data/db/:/data/db/ \
-d mongo:4 --auth 

設置賬號和密碼

登陸鏡像,設置admin

 docker exec -it mongod mongo admin
 
 >db.createUser({ user: 'admin', pwd: 'admin123456', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });

設置一個其他用戶

 db.auth("admin", "admin123456")
 db.createUser({ user: 'yapi', pwd: 'yapi123456', roles: [ { role: "readWrite", db: "yapi" } ] });
 

遠程登陸

我們從一個其他的服務器去登陸剛才創建的mongo。

先來獲取剛才創建的mongo的host,可以通過docker inspect,也可以

 docker exec -it mongod cat /etc/hosts

先用docker創建另一個mongo_client並連接我們的mongo

 docker run -it --name mongo mongo:4 mongo -host 172.17.0.5 -u yapi -p yapi123456
 
 > db
test
> use yapi
switched to db yapi
> show collections
test
>  db.test.find();
{ "_id" : ObjectId("5c9dca2b4d225a0ca0fb29c9"), "name" : "ryan" }

備份

創建mongodb服務的時候已經導出了我們的數據文件,現在干掉docker,重新跑,看我們的數據是否丟失。

 docker kill mongod
 docker rm mongod
  docker run  \
--name mongod \
-p 27017:27017  \
-v /data/opt/mongodb/data/configdb:/data/configdb/ \
-v /data/opt/mongodb/data/db/:/data/db/ \
-d mongo:4 --auth 

去登陸查看數據,發現沒有丟失

接下來就是備份我們的/data/opt/mongodb/data 目錄即可。當然,這是全量備份,想要增量備份,參照官方文檔進行備份。

全量備份/data/opt/mongodb/data

創建備份目錄/data/opt/mongodb/backup/data

創建備份日志目錄: /data/log/backup/mongodb

創建備份腳本backup-mongodb.sh

 source /etc/profile

LOG_DIR=/data/log/backup/mongodb
SOURCE_DIR=/data/opt/mongodb/data
BACKUP_DIR=/data/opt/mongodb/backup/data

REMOTE_IP=192.168.1.98
REMOTE_USER=root
REMOTE_DIR=/data/opt/backup/mongodb


function log()
{
  echo "[ `date '+%Y-%m-%d %H:%M:%S'` ] $1"
}


# 備份
function main(){
    d=`date "+%Y%m%d%H%M%S"`
    fname=${BACKUP_DIR}/backup_${d}.tgz
    log "開始備份 ${fname}"
    tar -zcf ${fname} ${SOURCE_DIR}

    scp ${fname} $REMOTE_USER@$REMOTE_IP:$REMOTE_DIR
    log "備份到遠程成功"


    log "開始刪除7天前的備份"
    find ${BACKUP_DIR} -type f  -atime +7 |xargs -t -i rm {}
    log "刪除完畢"
}


main >> ${LOG_DIR}/backup.log  2>&1

創建定時任務,每天2點全量備份

 0 2 * * * sh /data/opt/mongodb/backup/backup-mongodb.sh

同時,遠程備份服務器的定時清理腳本

source /etc/profile

BACKUP_DIR=/data/opt/backup
LOG_DIR=/data/log/backup

function log()
{
  echo "[ `date '+%Y-%m-%d %H:%M:%S'` ] $1"
}


# 
function main(){

    log "開始刪除7天前的備份"
    find ${BACKUP_DIR} -type f  -atime +7 |xargs -t -i rm {}
    log "刪除完畢"
}

main >> ${LOG_DIR}/clean_backup.log 2>&1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM