logo科技微讯

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

作者:科技微讯
日期:2020-06-06
📜 文章

以 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 要删除

具体步骤如下:

  • 按照惯例先执行:apt-get update && apt-get upgrade
  • 看看服务器是否已经安装 cron: dpkg -l cron,如果已经安装,会显示它的版本号等信息,如果没有安装会告诉你没有安装;
  • 如果没有安装,那执行这条命令安装: sudo apt-get install cron
  • 安装后,看看它是否正常运行: systemctl status cron
  • 设置一下 auto-backup.sh 的权限: chmod +x auto-backup.sh
  • 然后执行: crontab -e,选择你喜欢使用的文档编辑器,开始编辑 cron 定时任务;
  • 把你需要定期执行的任务添加到打开的文件的最后一行,比如添加 */1 * * * * /home/ubuntu/auto-backup.sh,意思是每分钟执行一次 auto-backup.sh 以备份数据,保存这个文件,注意路径都是绝对路径;
  • 搞掂。

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

donation赞赏
thumbsup0
thumbsdown0
暂无评论