mysql - 从单独的 Docker 容器运行 mysqldump 进行日常备份

标签 mysql docker cron

创建一个单独的 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/

相关文章:

php - mySQL 查询不适用于 PHP,但适用于 PHPMyAdmin

sql-server - 无法连接到在Docker容器中运行的SQL Server实例

docker - Docker Compose在gitlab ci中启动分离流程

docker - 无法在Docker容器中连接NLU

linux - @reboot cron 作业的替代方案,在 cron 守护进程启动时启 Action 业

mysql - 如何延迟加载或急切加载关联表的总和?

php - MySQL 行(除了最后一行)是缩进的并且不可搜索? (加载数据文件)

mysql - 如何在一个sql文件中插入多条相关记录

php - 从 CSV 使用 PHP 更新 MySQL 时超时

python - 从 cronjob 中的脚本启动 phantomJS