mysql - 如何通过 Docker 在生产环境中处理数据备份
问题描述
我有一个运行 MySQL 映像的以下 Docker 文件。
version: '3'
services:
mysql:
image: "mysql:5.7"
container_name: "mysql"
ports:
- "6603:3306"
volumes:
- ./assets/schema.sql:/docker-entrypoint-initdb.d/init.sql
environment:
DATABASE_HOST: mysql
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: mydb
MYSQL_USER: mysql
MYSQL_PASSWORD: pass
我在本地运行它,但在投入生产之前我有顾虑。
数据备份是如何发生的?我应该继续将容器提交到图像吗?
我是 Docker 新手,所以想知道通过 Docker 部署的数据库在生产中是如何处理的。
解决方案
我认为您不应该将容器提交给图像。数据是由容器管理的东西,但它不是 db 容器的“一部分”。如果你想在容器重启之间存储数据,你应该使用卷 - 这样你就可以在你的主机卷上保存数据,并mysql
使用这个卷运行更多的硬币容器,共享相同的数据。如何使用带有mysql
图像的卷在他们的文档部分中进行了描述Where to Store Data
。
而且,如果您想转储您的数据库,它也在第 1 节的文档中进行了描述Creating database dumps
。
如果您正在运行更多数据库容器并且想要进行转储,您应该以某种方式自动化此过程,例如作为可以访问您的容器的 Jenkins 作业,或者某些脚本在您的 docker 主机上作为 cron 作业运行 - 这完全取决于您使用什么工具正在使用。
推荐阅读
- google-chrome-extension - 带有 chrome 扩展程序的 Keycloak 登录 #2
- node.js - OAuth 1.0a 每 4 次失败一次
- javascript - 解析器继承不显示参数 typegraphql
- javascript - 如何为有评论的帖子构建 React 上下文
- filter - 如何增加片段着色器中像素之间的空间?
- deep-learning - pytorch 自定义数据集生成器中的“索引 1 超出尺寸 1 的维度 0”错误
- java - 在 Web servlet 应用程序中使用二进制数据初始化数据库
- outlook - Outlook 加载项 displayDialogAsync 在浏览器客户端中工作,而不是在完整客户端中
- python - 在饼图中的标题中添加 N
- python - 如何将新列分配给熊猫中的现有DataFrame