创建一个单独的 docker
容器来使用 cron 作业运行 mysqldump
进行日常备份是一个坏主意吗?
大多数人使用主机的 cron 作业或单独的 cron 容器从正在备份的容器内运行 mysqldump
。
我发现在专用于备份的容器中安装mysql
并执行mysqldump
会更好。这将使整个设置更加隔离。
这种方法有什么缺点吗?
此类 docker-compose-yml 的示例:
mysql:
image: mysql:latest
environment:
MYSQL_DATABASE: mydb
MYSQL_USER: myuser
MYSQL_PASSWORD: mypassword
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- ./mysql/mysql-data:/var/lib/mysql
mysql-cron:
image: mysql:latest
build: .
environment:
MYSQL_HOST: mysql
MYSQL_DATABASE: mydb
MYSQL_USER: myuser
MYSQL_PASSWORD: mypassword
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- ./backup:/var/backup
mysql-cron 的 Dockerfile
将安装“cron”并设置 crontab(尚未准备好)。
最佳答案
引用official mysql您可以查看图像的文档 docker exec
到正在运行的容器中,将数据库转储到主机上的路径:docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql
假设您正在使用docker
在 Linux 上,您很可能已经拥有 cron
已安装(您不需要使用 cron
构建和维护自己的镜像)。
您可以添加cron
主机上的作业 docker
正在运行至exec
定期放入容器中并转储数据库 ( crontab -e
),即每天凌晨 01:00: 0 1 * * * docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql
注意:cron
在特定环境下运行(例如,确保 docker
位于 $PATH
可用于 cron
等)。
关于mysql - 从单独的 Docker 容器运行 mysqldump 进行日常备份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57738914/