如何定时备份 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 命令恢复.