首页
/ 使用Docker Compose快速搭建go-mysql多版本MySQL测试环境

使用Docker Compose快速搭建go-mysql多版本MySQL测试环境

2025-07-08 05:20:19作者:蔡怀权

前言

go-mysql是一个用Go语言实现的MySQL工具库,它提供了MySQL复制协议解析、binlog事件处理等功能。在开发过程中,我们经常需要测试不同版本的MySQL兼容性。本文介绍如何使用Docker Compose快速搭建包含多个MySQL版本的服务环境,为go-mysql的开发和测试提供便利。

环境准备

在开始之前,请确保你的系统已经安装了以下工具:

  • Docker
  • Docker Compose

配置文件解析

下面我们将详细解析docker-compose.yaml文件中的各个服务配置:

1. MySQL 5.5.61服务

mysql-5.5.61:
    image: "mysql:5.5.61"
    container_name: "mysql-server-5.5.61"
    ports:
    - "5561:3306"
    command: --ssl=TRUE --ssl-ca=/usr/local/mysql/ca.pem --ssl-cert=/usr/local/mysql/server-cert.pem --ssl-key=/usr/local/mysql/server-key.pem
    volumes:
        - ./resources/ca.pem:/usr/local/mysql/ca.pem
        - ./resources/server-cert.pem:/usr/local/mysql/server-cert.pem
        - ./resources/server-key.pem:/usr/local/mysql/server-key.pem
    environment:
        - MYSQL_ALLOW_EMPTY_PASSWORD=true
        - bind-address=0.0.0.0

特点:

  • 使用MySQL 5.5.61官方镜像
  • 将容器3306端口映射到主机的5561端口
  • 启用了SSL连接,需要提供CA证书、服务器证书和密钥
  • 允许空密码登录
  • 绑定到所有网络接口

2. MySQL 5.6.41服务

配置与5.5.61类似,主要区别在于:

  • 使用MySQL 5.6.41镜像
  • 端口映射改为5641:3306

3. 默认MySQL服务(5.7.22)

mysql-default:
    image: "mysql:5.7.22"
    container_name: "mysql-server-default"
    ports:
        - "3306:3306"
    command: ["mysqld", "--log-bin=mysql-bin", "--server-id=1"]
    environment:
        - MYSQL_ALLOW_EMPTY_PASSWORD=true
        - bind-address=0.0.0.0

特点:

  • 使用MySQL 5.7.22作为默认版本
  • 直接映射到主机的3306端口
  • 启用了二进制日志(log-bin)并设置server-id=1,这对于测试MySQL复制功能很有用

4. 其他MySQL版本服务

配置中还包含了以下MySQL版本:

  • MySQL 5.7.22 (5722端口)
  • MySQL 8.0.3 (8003端口)
  • MySQL 8.0.12 (8012端口)
  • MySQL 8.0.12 with SHA256认证 (8013端口)

使用说明

  1. 启动所有服务:
docker-compose up -d
  1. 查看运行状态:
docker-compose ps
  1. 停止服务:
docker-compose down
  1. 连接特定版本的MySQL:
# 连接MySQL 5.5.61
mysql -h 127.0.0.1 -P 5561 -u root

# 连接MySQL 8.0.12 with SHA256认证
mysql -h 127.0.0.1 -P 8013 -u root

测试场景建议

这个多版本MySQL环境特别适合以下测试场景:

  1. 版本兼容性测试:验证go-mysql在不同MySQL版本下的行为一致性
  2. SSL连接测试:测试加密连接功能
  3. 认证插件测试:特别是MySQL 8.0的SHA256认证
  4. 复制协议测试:利用启用了binlog的默认MySQL服务
  5. 功能降级测试:确保在旧版本MySQL上的兼容性

注意事项

  1. 生产环境不建议使用空密码,这里仅用于开发和测试
  2. 如果需要持久化数据,可以添加数据卷配置
  3. 不同MySQL版本的默认配置可能有所不同,测试时需要注意
  4. MySQL 8.0版本在认证方式上有较大变化,测试时需要特别关注

总结

通过这个Docker Compose配置,我们可以快速搭建一个包含多个MySQL版本的环境,极大方便了go-mysql的开发和测试工作。这种环境隔离的方式既保证了测试的全面性,又避免了不同版本间的相互干扰。