【问题标题】:Backup docker volume or only mysqldump备份 docker 卷或仅 mysqldump
【发布时间】:2021-10-07 09:06:46
【问题描述】:

我有一个在 docker 容器中运行的 mysql 实例。我在/var/lib/mysql 中挂载了一个卷以在关闭容器后保留数据。我想我有两种选择可以将我的数据库备份到我的主机系统:

  1. 备份整个卷:
docker run --rm --volumes-from db -v {BACKUP_PATH_ON_HOST_SYSTEM}:/backup ubuntu tar cvf /backup/backup.tar /var/lib/mysql
  1. 只备份一个mysqldump

基本上运行上面的命令,但我没有备份卷,而是创建了一个 mysqldump,我将其复制到 /backup

哪个选项更好?

【问题讨论】:

    标签: mysql docker backup docker-volume


    【解决方案1】:

    我也有类似的要求。就我而言,我故意使用旧的mysql Docker 映像,如下所示:

      db:
        image: mysql:5.6
        container_name: ${COMPOSE_SITE_NAME}_mysql
        volumes:
          - db_files:/var/lib/mysql
          # Load the initial SQL dump into the DB when it is created.
          # This only runs once if the DB is empty.
          - ${SQL_DUMP_FILE}:/docker-entrypoint-initdb.d/dump.sql
        environment:
          MYSQL_ROOT_PASSWORD: ${WORDPRESS_DB_PASS}
          ...
    
    volumes:
      db_files:
        name: ${COMPOSE_SITE_NAME}_db_files
    

    如果卷丢失,则可以使用转储文件重新创建它。就我而言,我更喜欢制作转储文件,而不是在 /var/lib/mysql 文件夹中保留 SQL 文件的杂音。

    docker-compose exec db sh -c '\
      mysqldump -uroot -p$MYSQL_ROOT_PASSWORD --all-databases --routines --triggers \
    ' | gzip -c > /path/outside/docker/backup-`date '+%Y-%m-%d'`.sql.gz
    

    由于标准输出重定向 (>),这将在 Docker 外部的主机上创建一个压缩转储文件。我使用sh -c '',所以我可以在容器中重用MYSQL_ROOT_PASSWORD env var。随意调整它以适应您的 MySQL 要求,例如指定受限用户。

    使用默认标志,转储文件将包含 DROP TABLE IF EXISTS 语句,因此您可以在不删除卷的情况下替换现有数据库(docker-compose down 然后docker volume rm ...)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-13
      • 2019-05-06
      • 2020-04-08
      • 1970-01-01
      • 2019-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多