如何定时备份 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 要删除.

具体步骤如下:

  • 按照惯例先执行: 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 命令恢复.