据我所知,对于 MS SQL、PostgreSQL 和 even MySQL数据库(所以,我假设,一般来说对于 RDBMS 引擎),你不能简单地备份它们所在的文件系统,而是需要做一个 SQL 级别的备份以获得内部一致性的希望,从而获得实际恢复的能力。
然后answers like this确实the official docs referenced似乎建议可以tar
处理数据库数据:
docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
这两个想法似乎相互矛盾。 Docker 的工作方式有什么特别之处,可以不必使用 SQL 级别的备份吗?如果不是,我的理解中缺少什么? (当您不能使用它来备份生产数据库时,为什么将其用作官方示例?那不可能是对的...)
最佳答案
在某些情况下,使用磁盘上的数据库镜像应该是安全的:
- 数据库服务器没有运行。
- 所有持久数据都在正在备份的磁盘系统上(日志、表空间、临时存储)。
- 所有组件一起恢复。
- 您正在将图像恢复到同一路径上的同一服务器。
最后一个条件很重要,因为数据库配置的某些方面可能存储在操作系统文件中。
每当服务器运行时,您都需要在数据库中进行备份。服务器负责数据的内部一致性,磁盘镜像可能不完整或不可恢复。如果服务器没有运行,那么数据库的状态在持久存储中应该是一致的。
关于mysql - docker 托管的数据库是否以某种方式免于备份最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31049402/