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

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

MySQL 版本 Compose Docker 113    来源:    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 时的版本依赖问题。