使用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端口)
使用说明
- 启动所有服务:
docker-compose up -d
- 查看运行状态:
docker-compose ps
- 停止服务:
docker-compose down
- 连接特定版本的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环境特别适合以下测试场景:
- 版本兼容性测试:验证go-mysql在不同MySQL版本下的行为一致性
- SSL连接测试:测试加密连接功能
- 认证插件测试:特别是MySQL 8.0的SHA256认证
- 复制协议测试:利用启用了binlog的默认MySQL服务
- 功能降级测试:确保在旧版本MySQL上的兼容性
注意事项
- 生产环境不建议使用空密码,这里仅用于开发和测试
- 如果需要持久化数据,可以添加数据卷配置
- 不同MySQL版本的默认配置可能有所不同,测试时需要注意
- MySQL 8.0版本在认证方式上有较大变化,测试时需要特别关注
总结
通过这个Docker Compose配置,我们可以快速搭建一个包含多个MySQL版本的环境,极大方便了go-mysql的开发和测试工作。这种环境隔离的方式既保证了测试的全面性,又避免了不同版本间的相互干扰。