news 2026/5/31 4:17:03

告别混乱:用Docker Compose一键部署Mycat2开发测试环境

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
告别混乱:用Docker Compose一键部署Mycat2开发测试环境

告别混乱:用Docker Compose一键部署Mycat2开发测试环境

在分布式数据库中间件的开发与测试过程中,环境配置往往是最令人头疼的环节之一。传统的手动部署方式不仅步骤繁琐,还容易因系统环境差异导致各种"玄学"问题。想象一下这样的场景:你花了半天时间按照文档一步步安装配置,却在最后一步发现某个依赖库版本不兼容;或者当需要同时测试多个Mycat2版本时,系统目录被各种配置文件搞得一团糟。这些问题不仅浪费时间,更会严重打断开发者的思路流畅性。

容器化技术为这些问题提供了优雅的解决方案。通过Docker Compose,我们可以在几分钟内创建一个隔离的、可复制的Mycat2测试环境,而且这个环境与生产环境的拓扑结构完全一致。当测试完成后,只需一条命令就能彻底清理所有痕迹,不会在主机系统留下任何"残渣"。这种方法特别适合需要频繁搭建和销毁测试环境的场景,比如CI/CD流水线、多版本兼容性测试,或是团队内部的知识分享与培训。

1. 环境准备与架构设计

在开始编写docker-compose.yml之前,我们需要明确整个环境的组件构成。一个完整的Mycat2测试环境通常包含以下元素:

  • Mycat2服务:作为数据库中间件核心,版本选择1.21
  • MySQL原型数据库:Mycat2运行所必需的后端数据库
  • 网络配置:确保各容器间可以互相通信
  • 数据持久化卷:用于保存配置文件和日志
  • 初始化脚本:自动创建必要用户和权限

这种架构的最大优势在于其环境一致性。无论是在本地开发机、团队成员的笔记本,还是CI服务器上,只要使用相同的docker-compose文件,就能获得完全一致的运行环境。这彻底解决了"在我机器上能跑"的经典问题。

1.1 目录结构规划

合理的目录结构是项目可维护性的基础。建议采用如下布局:

mycat2-docker/ ├── docker-compose.yml ├── config/ │ ├── prototypeDs.datasource.json │ └── server.json ├── scripts/ │ └── init.sql └── data/ ├── mysql/ └── mycat/

关键目录说明

  • config/:存放Mycat2的配置文件
  • scripts/:数据库初始化SQL脚本
  • data/:MySQL和Mycat的数据持久化目录

2. Docker Compose文件详解

下面是一个功能完整的docker-compose.yml示例,我们分段解析其关键配置:

version: '3.8' services: mysql: image: mysql:8.0 container_name: mycat-mysql environment: MYSQL_ROOT_PASSWORD: root123 MYSQL_DATABASE: mycat MYSQL_USER: mycat MYSQL_PASSWORD: mycat123 volumes: - ./data/mysql:/var/lib/mysql - ./scripts/init.sql:/docker-entrypoint-initdb.d/init.sql ports: - "3306:3306" networks: - mycat-network mycat: image: mycat/mycat2:1.21 container_name: mycat-server depends_on: - mysql volumes: - ./config:/opt/mycat/conf - ./data/mycat/logs:/opt/mycat/logs ports: - "8066:8066" networks: - mycat-network networks: mycat-network: driver: bridge volumes: mysql-data: mycat-data:

2.1 MySQL服务配置解析

MySQL容器配置有几个关键点值得注意:

  1. 环境变量:我们通过环境变量设置了root密码、创建了专用数据库和用户,这比手动执行SQL更加简洁可靠
  2. 初始化脚本/docker-entrypoint-initdb.d/是MySQL官方镜像的特殊目录,任何放在这里的.sql文件都会在容器首次启动时自动执行
  3. 数据持久化:将MySQL数据目录挂载到主机,确保容器重启后数据不丢失

2.2 Mycat2服务配置要点

Mycat2容器的配置有几个技术细节:

  • 版本选择:明确指定1.21版本,避免自动更新导致的不兼容
  • 配置文件挂载:将主机上的config目录映射到容器内的配置目录,方便修改配置
  • 依赖管理:通过depends_on确保MySQL先于Mycat2启动
  • 网络配置:使用自定义网络确保容器间可通过服务名互相访问

3. 配置文件与初始化脚本

3.1 Mycat2核心配置

config/prototypeDs.datasource.json中,我们需要配置Mycat2连接原型数据库的参数:

{ "dbType": "mysql", "idleTimeout": 60000, "instanceType": "READ_WRITE", "maxCon": 1000, "name": "prototypeDs", "password": "mycat123", "type": "JDBC", "url": "jdbc:mysql://mysql:3306/mycat?useUnicode=true&characterEncoding=UTF-8", "user": "mycat" }

关键参数说明

  • url中的主机名使用服务名"mysql"而非IP,这是Docker网络的优势
  • 密码与docker-compose中设置的MySQL用户密码一致
  • dbType明确指定为mysql,这是Mycat2支持的后端数据库类型

3.2 数据库初始化脚本

scripts/init.sql用于设置Mycat所需的数据库权限:

-- 创建Mycat专用用户 CREATE USER 'mycat'@'%' IDENTIFIED BY 'mycat123'; GRANT XA_RECOVER_ADMIN ON *.* TO 'mycat'@'%'; GRANT ALL PRIVILEGES ON *.* TO 'mycat'@'%'; FLUSH PRIVILEGES;

这个脚本会在MySQL容器首次启动时自动执行,确保Mycat2有足够的权限创建和管理所需的系统表。

4. 操作流程与日常管理

4.1 启动与停止环境

启动整个环境只需一条命令:

docker-compose up -d

参数说明

  • -d表示在后台运行
  • 首次运行会自动拉取镜像并创建容器

停止环境同样简单:

docker-compose down

如果需要彻底清理(包括持久化数据):

docker-compose down -v

4.2 日常维护命令

查看Mycat2日志:

docker logs -f mycat-server

进入MySQL容器执行查询:

docker exec -it mycat-mysql mysql -umycat -pmycat123

重启单个服务(如修改配置后):

docker-compose restart mycat

4.3 连接与测试

Mycat2默认监听8066端口,可以使用任何MySQL客户端连接:

mysql -h127.0.0.1 -P8066 -uroot -p123456

或者使用图形化工具如DBeaver、Navicat等连接,连接参数与普通MySQL一致。

5. 高级配置与技巧

5.1 多节点部署模式

如果需要模拟生产环境的集群部署,可以扩展docker-compose.yml:

services: mysql-master: image: mysql:8.0 # ...其他配置类似 environment: MYSQL_REPLICATION_MODE: master MYSQL_REPLICATION_USER: repl MYSQL_REPLICATION_PASSWORD: repl123 mysql-slave: image: mysql:8.0 depends_on: - mysql-master environment: MYSQL_REPLICATION_MODE: slave MYSQL_REPLICATION_USER: repl MYSQL_REPLICATION_PASSWORD: repl123 MYSQL_MASTER_HOST: mysql-master

然后在Mycat2配置中配置读写分离规则即可。

5.2 性能调优建议

对于性能要求较高的场景,可以调整以下参数:

  1. JVM参数:通过环境变量设置
environment: JAVA_OPTS: "-Xms1G -Xmx2G -XX:+UseG1GC"
  1. 连接池配置:修改prototypeDs.datasource.json中的maxCon和minCon

  2. Mycat2线程池:调整conf/server.json中的processor配置

5.3 常见问题排查

问题1:Mycat2启动失败,日志显示无法连接MySQL

解决方案

  1. 确认MySQL容器已正常运行:docker ps
  2. 检查MySQL日志:docker logs mycat-mysql
  3. 验证网络连通性:docker exec mycat-server ping mysql

问题2:修改配置后不生效

解决方案

  1. 确认配置文件已正确挂载:docker exec mycat-server ls /opt/mycat/conf
  2. 重启Mycat2服务:docker-compose restart mycat
  3. 检查文件权限:确保主机上的配置文件可读

问题3:性能瓶颈

解决方案

  1. 监控系统资源:docker stats
  2. 调整JVM内存参数
  3. 优化Mycat2和MySQL的配置参数

6. 版本管理与升级策略

6.1 多版本并存方案

通过修改docker-compose.yml中的image标签,可以轻松切换Mycat2版本:

mycat: image: mycat/mycat2:1.20 # 切换为1.20版本

不同版本的容器可以同时运行,只需修改容器名称和端口映射即可:

mycat-1.20: image: mycat/mycat2:1.20 ports: - "8067:8066" # 使用不同端口 mycat-1.21: image: mycat/mycat2:1.21 ports: - "8066:8066"

6.2 配置迁移策略

当需要升级Mycat2版本时,建议遵循以下步骤:

  1. 备份当前配置和数据:
cp -r config config_backup cp -r data data_backup
  1. 修改docker-compose.yml中的版本号

  2. 启动新版本:

docker-compose up -d
  1. 对比新旧版本的配置文件差异,必要时进行调整

  2. 验证功能正常后,再考虑删除备份

6.3 自定义镜像构建

如果需要修改Mycat2的默认配置或添加自定义插件,可以基于官方镜像构建自定义镜像:

FROM mycat/mycat2:1.21 # 覆盖默认配置 COPY my-custom-config/ /opt/mycat/conf/ # 添加自定义插件 COPY custom-plugins/ /opt/mycat/lib/

然后在docker-compose.yml中引用这个自定义镜像:

mycat: build: ./my-custom-mycat # 其他配置保持不变

这种方案特别适合需要长期维护的团队级开发环境。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/31 4:16:51

STM32驱动HC-SR04做小车避障?别急,先看看这3个精度陷阱

STM32驱动HC-SR04避障实战:破解三大精度陷阱的工程化解决方案当你在深夜调试智能小车,看着超声波模块返回的数据时而准确时而飘忽,那种挫败感我太熟悉了。HC-SR04作为创客圈最普及的超声波模块,其2cm-400cm的标称参数在静态测试中…

作者头像 李华
网站建设 2026/5/31 4:16:01

告别JSON!用Protobuf + Java 17提升你的微服务性能(附完整代码示例)

告别JSON!用Protobuf Java 17提升你的微服务性能(附完整代码示例) 当你的微服务日请求量突破百万时,JSON序列化带来的性能损耗会突然变得刺眼。我曾在一个电商大促中亲眼目睹:仅仅因为订单服务使用JSON传输数据&#…

作者头像 李华
网站建设 2026/5/31 4:14:09

山东专升本资料推荐|英语计算机语文高数真题精练

山东专升本资料推荐|英语计算机语文高数真题精练资料全科都有山东专升本资料推荐汇总https://pan.quark.cn/s/7965aa8535f7 山东专升本全省统考一般为 4 门公共课、总分 400 分:大学英语(或政治)、计算机、大学语文、高等数学&…

作者头像 李华
网站建设 2026/5/31 4:14:00

Fast-GitHub终极指南:3分钟解决GitHub访问卡顿的完整教程

Fast-GitHub终极指南:3分钟解决GitHub访问卡顿的完整教程 【免费下载链接】Fast-GitHub 国内Github下载很慢,用上了这个插件后,下载速度嗖嗖嗖的~! 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 国内开发者访…

作者头像 李华
网站建设 2026/5/31 4:08:17

PL-2303芯片Windows 10驱动兼容性深度解析与架构设计

PL-2303芯片Windows 10驱动兼容性深度解析与架构设计 【免费下载链接】pl2303-win10 Windows 10 driver for end-of-life PL-2303 chipsets. 项目地址: https://gitcode.com/gh_mirrors/pl/pl2303-win10 在Windows 10系统环境下,许多工业控制、嵌入式开发和物…

作者头像 李华