docker compose将mysql传输到另一台主机

docker compose将mysql传输到另一台主机,mysql,docker,docker-compose,Mysql,Docker,Docker Compose,我正在使用docker compose运行MYSQL容器并将其链接到www服务器 mysql: image: mysql container_name: lip-mysql ports: - "3030:3306" environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=user-db - MYSQL_USER=user - MYSQL_PASSWORD=user volume

我正在使用docker compose运行MYSQL容器并将其链接到www服务器

 mysql:
  image: mysql
  container_name: lip-mysql
  ports:
    - "3030:3306"
  environment:
    - MYSQL_ROOT_PASSWORD=root
    - MYSQL_DATABASE=user-db
    - MYSQL_USER=user
    - MYSQL_PASSWORD=user
  volumes: 
    - ./etc/mysql:/var/lib/mysql
当我在自己的计算机上运行它并想将其传输到生产环境时。我这样做

  • 复制到卷etc/mysql目录到服务器
  • 然后构建这个docker compose构建
  • 然后启动docer compose up-d
  • 当试图访问数据时。我收到错误“找不到基表或视图:1146表‘user db.Packages’不存在”。我发现数据库结构存在,但无法访问数据

  • 我应该如何将mysql数据移动到新环境?

    您可以从您的计算机转储mysql数据库并将其恢复到其他环境中吗

    转储数据库:

    docker exec -it lip-mysql mysqldump --opt -u [uname] -p[pass] [dbname] > [backupfile.sql]
    
    还原数据库:

    docker exec -it lip-mysql mysql -u [uname] -p[pass] [db_to_restore] < [backupfile.sql]
    
    docker exec-it lip mysql-u[uname]-p[pass][db\u to\u restore]<[backupfile.sql]
    

    您还可以在docker compose文件中固定MySQL docker映像,以避免非预期的MySQL引擎更新。

    以下是我使用的解决方案

    • 首先将您的mysql文件传输到另一个
      卷:-./etc/mysql:/var/lib/mysql
      服务器
    • 然后创建docker-compose.yml并像POST一样导入卷
    • 我的问题来了。版本编号MYSQL图像。启动mysql时使用相同的版本编号。如果您使用的是最新的标签,您应该会收到使用mysql\u升级的错误消息。如果要使用最新图像,请使用它
    以下是要启动的正确docker-compose.yml:

    mysql:
      image: mysql:5.7
      container_name: lip-mysql
      ports:
        - "3030:3306"
      environment:
        - MYSQL_ROOT_PASSWORD=root
        - MYSQL_DATABASE=user-db
        - MYSQL_USER=user
        - MYSQL_PASSWORD=user
      volumes: 
        - ./etc/mysql:/var/lib/mysql
    

    我可以做转储,并在启动时添加这些。但我想如何将其自动存储到硬盘中