插件窝 干货文章 Docker Compose 部署 MySQL 报错:如何解决依赖版本不一致问题?

Docker Compose 部署 MySQL 报错:如何解决依赖版本不一致问题?

MySQL 版本 Compose Docker    来源:    2025-03-31

解决 Docker Compose 部署 MySQL 版本依赖问题

当使用 Docker Compose 部署 MySQL 时遇到依赖版本不一致问题,通常有以下几种解决方案:

常见错误表现

  1. This server supports only the latest major version by this minor version
  2. Incompatible server version
  3. Client does not support authentication protocol

解决方案

1. 明确指定 MySQL 版本

在 docker-compose.yml 中明确指定 MySQL 版本,避免使用 latest 标签:

services:
  mysql:
    image: mysql:8.0.33  # 指定具体版本
    environment:
      MYSQL_ROOT_PASSWORD: example

2. 检查客户端与服务器版本兼容性

确保你的 MySQL 客户端工具(如 MySQL Workbench、命令行工具)与容器中的 MySQL 服务器版本兼容。

3. 解决认证协议问题(MySQL 8.0+)

对于 MySQL 8.0 及以上版本,可能需要修改认证方式:

services:
  mysql:
    image: mysql:8.0
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: example

4. 使用 volumes 持久化数据

当升级 MySQL 版本时,确保正确迁移数据:

services:
  mysql:
    image: mysql:8.0
    volumes:
      - mysql_data:/var/lib/mysql
volumes:
  mysql_data:

5. 检查依赖服务版本

如果其他服务依赖 MySQL,确保它们的版本也兼容:

services:
  mysql:
    image: mysql:8.0
    # ...

  app:
    image: your-app-image
    depends_on:
      - mysql
    environment:
      - DB_HOST=mysql
      - DB_PORT=3306

调试技巧

  1. 查看 MySQL 容器日志:

    docker-compose logs mysql
    
  2. 进入容器检查版本:

    docker-compose exec mysql mysql --version
    
  3. 检查客户端版本:

    mysql --version
    

版本兼容性参考

  • MySQL 5.7 客户端通常可以连接 MySQL 8.0 服务器(可能需要调整认证方式)
  • 从 MySQL 8.0 开始,默认使用 caching_sha2_password 认证插件
  • 主要版本升级(如 5.7 → 8.0)可能需要数据迁移

通过以上方法,你应该能够解决大多数 Docker Compose 部署 MySQL 时的版本依赖问题。