科技微讯

如何定时备份 mongodb docker 容器的数据

以 ubuntu 服务器为例,比如你有一个这样的 docker-compose 文件:

version: "3.1"
services:
  mongo:
    image: mongo
    container_name: mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example
    ports:
      - 27017:27017
    volumes:
      - mongodb:/backup
volumes:
  mongodb:
    driver: local
    driver_opts:
      type: none
      device: home/ubuntu/mongodb_backup
      o: bind

要备份 mongodb 的数据库,只需要执行:

docker exec -it mongo mongodump -u root -p example --authenticationDatabase=admin  -o /backup

这条命令的格式是:docker exec [容器名称] [命令],这条命令的意思是把数据库保存到容器的 /backup 文件夹,由于 docker-compose 文件已经把容器的 /backup 文件夹映射到服务器的 home/ubuntu/mongodb_backup 文件夹,所以数据备份后,我们可以直接在服务器的 /home/ubuntu/mongodb_backup 看到这些备份下来的数据。

相当于下面两条命令的组合:

docker exec -it mongo /bin/bash
mongodump -u root -p example --authenticationDatabase=admin  -o /backup

上面这条命令会把 mongodb 的所有数据库的数据都备份下来,如果要备份指定数据库的数据,可以添加 -d some_db_name

为了让这条命令定时执行,可以先创建一个叫 auto-backup.sh 的文件,把 docker exec mongo mongodump -u root -p example --authenticationDatabase=admin -o /backup 添加到这个文件,然后在服务器安装 cron 并设置 cron 定时任务。

注意,添加到 cron 任务时,docker exec -it 中的 -it 要删除

具体步骤如下:

当你撘建了一个新的 mongodb 容器,如果希望把备份下来的数据恢复到这个新的容器中,只需要把这些数据添加到新的 mongodb 容器,然后用 mongorestore 命令恢复。

thumbsup0
thumbsdown0
暂无评论