• 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
  • 相关阅读:
    JS 反射机制及 Reflect 详解
    React Hooks
    深入理解 React setState
    React 函数组件和类组件的区别
    tsconfig.json 编译器配置大全
    React TS 解决不声明变量类型时的报错问题
    JSX onClick 和 HTML onclick 的区别
    深入理解 ES6 Generator
    JS 算法与数据结构之队列
    深入理解 ES6 Proxy
  • 原文地址:https://www.cnblogs.com/adjk/p/11077530.html
Copyright © 2020-2023  润新知