• 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
  • 相关阅读:
    基于百度ueditor的富文本编辑器
    IE 跨域后COOKIE无法更新
    C笔记
    KOHANA3.3 ORM中文详解
    ReflectionClass getDocComment 返回false
    C中的栈区&堆区
    通过GMAP得到坐标对应地址
    准备学习Flex,记录下开始时间。
    法律援助网站!http://www.qinquan.org
    博客园也有刷新提交的问题?
  • 原文地址:https://www.cnblogs.com/adjk/p/11077530.html
Copyright © 2020-2023  润新知