资讯动态

MyCat 2 安装模板拆解与配置实战:从解压到分片路由验证

发布时间:2026/10/13 21:25:05 来源:尧图企业网站定制
简介mycat2-install-template-1.21.zip 是面向 MyCat 2 初学者与运维开发者的安装模板包用于简化这款开源 Java 数据库中间件的部署流程。MyCat 2 常用于数据分片、读写分离与分布式事务场景该模板将启动脚本、配置目录与依赖库预先组织好降低上手门槛。压缩包共 52 个文件约 1.19MB涵盖 sql 初始化脚本、json 配置、xml 与 properties 参数文件以及适配 Linux、Windows、macOS、AIX、Solaris 等多平台的 wrapper 启动库与 so、dll、jnilib 等本地依赖另含 mycat 主程序与日志目录结构。已有 640 人学习下载。借助它读者可快速获得一套可直接解压使用的目录骨架对照 conf 下的 schemas、datasources、users 等模块理解分片与数据源配置并借助多平台 wrapper 脚本完成服务启停适合作为搭建与调试 MyCat 2 环境的起点。1. 拿到 mycat2-install-template-1.21.zip 之后先别急着解压如果你正在把单库拆成多库、或者被一张几千万行的订单表拖到查询超时大概率已经听过 MyCat 2 这个名字。mycat2-install-template-1.21.zip就是官方给出的安装模板包它把 MyCat 2 跑起来需要的那套目录骨架、启动脚本、JVM 包装器wrapper和默认配置一次性打包好了。你不需要自己去拼bin、conf、lib、logs这些目录解压出来就是一个能直接改配置、直接启动的实例。这个包最实在的地方在于它把跨平台的 wrapper 全带上了wrapper-linux-x86-64、wrapper-windows-x86-64.exe、wrapper-macosx-universal-64连 AIX、Solaris、HP-UX 这些老平台的二进制都在bin和lib里躺着。也就是说不管你是在本地 Mac 上试水还是在 CentOS 服务器上部署同一份模板都能用。它适合两类人一是第一次接触 MyCat 2、想先把服务跑起来再研究分片规则的新手二是需要快速搭一套测试环境、验证读写分离或分库分表方案是否可行的后端和运维。但模板终究是模板默认配置离生产可用还有距离下面按我实际拆包的顺序讲清楚每一步。2. 拆开模板看结构bin、conf、lib 各自管什么2.1 目录骨架与文件职责解压mycat2-install-template-1.21.zip之后根目录下会看到bin、conf、lib、logs四个核心目录外加mycat.lock、state.json、version.txt这几个状态和版本文件。先别改任何东西用一条命令把结构看清楚unzip mycat2-install-template-1.21.zip -d /opt/mycat2 cd /opt/mycat2 find . -maxdepth 2 -type d | sort ls -lh bin lib confbin目录里是启动入口和 wrapper 二进制。Linux 下真正干活的是mycatshell 脚本配合libwrapper-linux-x86-64.soWindows 下是mycat.bat配合wrapper-windows-x86-64.exe。conf目录是配置核心server.json管服务端口和用户datasources目录放数据源定义clusters目录放集群节点schemas目录放逻辑库和分片规则sequences和dbseq.sql负责全局序列logback.xml和simplelogger.properties管日志。lib目录里除了wrapper.jar还有各平台的 wrapper 库文件MyCat 2 自身的 jar 包也在这一层。logs是运行日志输出目录mycat.lock和state.json是运行时状态文件服务启动后会写入。这里有个容易忽略的点conf下的version.txt和根目录的version.txt不是一回事前者记录配置模板版本后者记录 MyCat 2 内核版本。排查版本不一致问题时两个都要看。2.2 启动脚本与 wrapper 的配合逻辑MyCat 2 没有用裸java -jar启动而是套了一层 Java Service Wrapper。这样做的好处是能自动重启、能按平台加载对应的 native 库、能把 JVM 参数集中到wrapper.conf里管理。启动流程是bin/mycat start读取conf/wrapper.confwrapper 根据当前操作系统加载lib下对应的.so、.dll或.jnilib再拉起 MyCat 主类。先确认 Java 环境MyCat 2 对 JDK 版本有要求常见做法是用 JDK 8 或 JDK 11java -version echo $JAVA_HOME然后给启动脚本加执行权限并启动chmod x bin/mycat bin/mycat start启动后别只看屏幕输出直接跟日志tail -f logs/wrapper.log tail -f logs/mycat.logwrapper.log记录 wrapper 自身的启动过程和 JVM 退出码mycat.log才是 MyCat 业务日志。如果mycat.log没生成说明 JVM 根本没起来问题在 wrapper 层重点看wrapper.log里的Unable to start JVM或java.lang.UnsatisfiedLinkError。参数方面wrapper.conf里wrapper.java.command指定 java 路径wrapper.java.maxmemory控制堆上限模板默认值偏保守测试环境可以先不动压测前再调。3. 配置落地server.json、datasources 与 schemas 怎么改3.1 server.json 里的端口与用户conf/server.json是服务级配置决定 MyCat 对外暴露什么。模板里默认会有一个server对象包含port、managerPort、users等字段。MyCat 2 的配置格式是 JSON和 MyCat 1 的 XML 完全不同别拿老教程往这里套。一个典型的server.json结构如下{ server: { port: 8066, managerPort: 9066, users: { root: { password: 123456, schemas: [test_db] } } } }port是数据端口MySQL 客户端连这个managerPort是管理端口用于执行reload等管理命令。users里每个用户绑定自己能访问的逻辑库名这个库名必须和schemas目录下的文件名对应。改完server.json不需要重启用管理端口执行reload config即可生效但首次启动前必须保证 JSON 格式合法否则服务直接起不来。提示JSON 不支持注释改配置时别顺手写//这是新手最常见的启动失败原因。3.2 datasources 与 clusters 的对应关系conf/datasources目录下每个.json文件定义一个物理数据源conf/clusters目录下每个.json定义一个集群。数据源里写的是真实 MySQL 的地址、库名、账号密码{ name: dw0, url: jdbc:mysql://127.0.0.1:3306/db0?useSSLfalseserverTimezoneUTC, user: root, password: 123456, type: mysql }集群文件则把多个数据源组织成主从或分片组{ name: c0, masters: [dw0], replicas: [dw1] }masters承担写replicas承担读读写分离就是靠这里区分的。参数上url里的serverTimezone必须显式指定否则 MySQL 8 驱动会报时区错误useSSLfalse在测试环境可以省掉证书配置的麻烦生产环境按实际安全要求调整。数据源名和集群名一旦被schemas引用就不要随意改改名等于断链。3.3 schemas 里定义逻辑库与分片conf/schemas目录下的文件定义逻辑库里面包含逻辑表、分片规则和路由目标。一个最简单的单库映射长这样{ schemaName: test_db, defaultTarget: c0, tables: { user: { targets: [c0] } } }schemaName要和server.json里用户绑定的库名一致defaultTarget指向集群名。如果要分片就在表级别加sharding相关配置指定分片键和分片算法。这里最容易翻车的是逻辑库名、集群名、数据源名三者对不上服务启动时不会报错但查询时会提示找不到目标。改完schemas后同样用reload config重载然后连上 8066 端口执行show databases验证逻辑库是否可见。4. 避坑排查启动失败、连不上、查询报错的常见原因4.1 启动脚本报 Permission denied 或找不到 java现象是执行bin/mycat start后立刻退出wrapper.log里出现Cannot run program java或Permission denied。原因通常是两个一是bin/mycat和lib下的.so没有执行权限二是wrapper.conf里的wrapper.java.command指向了一个不存在的 java 路径。解决方式是先chmod x bin/mycat lib/*.so再用which java拿到绝对路径写进wrapper.conf的wrapper.java.command。如果系统装了多个 JDK务必确认JAVA_HOME和wrapper.conf指向同一个。4.2 端口被占用导致启动后立即停止现象是bin/mycat start显示成功但几秒后进程消失wrapper.log里能看到Address already in use。原因是 8066 或 9066 端口已经被别的 MySQL 或上一个没退干净的 MyCat 实例占用。先用ss -lntp | grep -E 8066|9066确认占用进程再决定是杀掉旧进程还是改server.json里的端口。注意改端口后客户端连接命令也要同步改别只改一半。4.3 数据源连不上但日志只报笼统错误现象是服务起来了但执行查询时提示cant connect to datasource而mycat.log里没有更细的堆栈。原因是 MyCat 2 默认日志级别可能把 JDBC 异常吞掉了。解决办法是临时把logback.xml里对应包的日志级别调到DEBUG重点看io.mycat.datasource包重新加载后再复现一次就能看到真实的Communications link failure或Access denied。确认是网络、账号还是库名问题后再把日志级别调回去别一直开着 DEBUG 跑生产。4.4 reload 配置后不生效现象是改了schemas或datasources执行reload config返回成功但查询行为没变。原因通常是改的文件没有被 MyCat 扫描到或者 JSON 里有语法错误导致部分配置被跳过。MyCat 2 重载时如果某个文件解析失败不一定会中断整个 reload。解决方式是每次改完配置先用python -m json.tool或jq校验 JSON 合法性再 reload然后查mycat.log里有没有reload相关的警告行。养成改一个文件、校验、重载、验证的四步习惯比一次改一堆再排查省时间。4.5 全局序列配置遗漏导致插入报错现象是分片表插入时报sequence not found或主键冲突。原因是conf/sequences目录下没有为对应表配置序列或者dbseq.sql没有在物理库中执行。MyCat 2 的全局序列支持本地文件和数据库两种方式模板里dbseq.sql是数据库方式的建表脚本。解决方式是先确认sequences下有对应配置再把dbseq.sql在目标 MySQL 实例里执行一遍最后 reload。漏执行 SQL 是血泪经验里出现频率最高的一条。5. 验证与进阶从连上 8066 到确认分片路由正确服务起来、配置改完最后一步是验证它真的按你预期在工作。先用 MySQL 客户端连 8066mysql -h127.0.0.1 -P8066 -uroot -p123456连上后执行show databases;应该能看到server.json里绑定的逻辑库。再use test_db;然后show tables;确认逻辑表可见。这一步只能证明服务通了不能证明分片正确。要验证分片路由得看执行计划。MyCat 2 支持explain语句explain select * from user where id 100;返回结果里会显示这条 SQL 被路由到了哪个数据源、哪个真实表。如果id是分片键不同值应该路由到不同节点。我一般会准备几条分片键取不同值的 SQL逐条explain确认路由目标和预期一致。这一步能提前发现分片算法配错、分片键选错的问题比等数据写歪了再修便宜得多。读写分离的验证稍微麻烦一点。常见做法是在主库和从库的同一张表里插入一条带标记的数据然后通过 MyCat 执行读操作看返回的是主库还是从库的数据。如果读到了从库标记说明读路由生效如果读到的还是主库检查clusters里replicas是否配置正确、从库同步是否正常。注意主从延迟会导致读到的数据不一致验证时最好在写入后等几秒再读。还有一个容易被忽略的验证点是管理端口的reload和show datasource这类命令。管理端口 9066 连上去后可以查看数据源状态、连接池使用情况。压测前用show datasource确认每个数据源都是OK状态比直接上压测工具再回头排查要主动。从那以后我每次拿到一个新的 MyCat 2 模板包都强制走一遍「校验 JSON → 启动看 wrapper.log → 连 8066 → explain 验证路由 → 管理端口查数据源状态」这五步不管多急都不跳。模板能帮你省掉搭骨架的时间但配置和验证这两件事没有任何模板能替你做完。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑