如何通过docker在生产中处理数据备份

时间:2019-05-26 07:10:13

标签: 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部署数据库时生产中的处理方式。

2 个答案:

答案 0 :(得分:3)

我认为您不应该将容器提交给图像。数据是由容器管理的,但不是db容器的“一部分”。如果要在两次容器重启之间存储数据,则应使用卷-这样,您将能够在主机卷上保存数据,并在该卷上运行更多mysql个硬币容器,共享相同的数据。在其documentation-mysql部分中介绍了如何对具有Where to Store Data图像的卷使用。

此外,如果您要转储数据库,请参见Creating database dumps部分中的文档。

如果您正在运行更多的数据库容器,并且想要进行转储,则应以某种方式使该过程自动化,例如作为可以访问容器的詹金斯作业,或者某些脚本作为docker主机上的cron作业运行-这全都取决于您正在使用什么工具。

答案 1 :(得分:0)

您应该添加卷以包含实际的db文件。由于某种原因,当前您只有模式,当容器崩溃时,数据将丢失。 在将卷添加为永久卷之后,可以使用标准备份方法,例如cron作业。