以 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
;dpkg -l cron
,如果已经安装,会显示它的版本号等信息,如果没有安装会告诉你没有安装;sudo apt-get install cron
;systemctl status cron
;chmod +x auto-backup.sh
;crontab -e
,选择你喜欢使用的文档编辑器,开始编辑 cron 定时任务;*/1 * * * * /home/ubuntu/auto-backup.sh
,意思是每分钟执行一次 auto-backup.sh 以备份数据,保存这个文件,注意路径都是绝对路径;当你撘建了一个新的 mongodb 容器,如果希望把备份下来的数据恢复到这个新的容器中,只需要把这些数据添加到新的 mongodb 容器,然后用 mongorestore 命令恢复。