☰
mycat2基础安装包安装配置与避坑指南
2026/10/20 2:32:36 网站建设 项目流程

简介:这份资源是面向Java后端开发与数据库运维人员的Mycat2基础安装包,用于在服务器上快速部署开源分布式数据库中间件Mycat的第二代版本,解决大数据量、高并发场景下单机数据库难以承载的存储与访问瓶颈。压缩包共51个文件,约1.2MB,以跨平台wrapper动态库(so、dll、jnilib、a等)和启动脚本为主,覆盖Linux、Windows、macOS、AIX、Solaris等系统,另含sql初始化脚本、json与xml配置、jar依赖及properties日志配置,解压后即可按需修改schema与server配置并启动服务。目前已有1069人学习下载。通过该安装包,读者可搭建起支持数据分片、读写分离、SQL路由与动态扩展的Mycat2实例,结合conf目录下的分片规则与数据源配置,理解分布式数据库中间件的部署流程与高可用机制,适合需要快速验证分库分表方案或搭建本地实验环境的中高级开发者参考。

1. 从一次 MySQL 连接数打满说起:mycat2 基础安装包到底装的是什么

凌晨两点,某公司内部测试环境的 MySQL 连接数突然被打满,业务方反馈所有查询都卡在“获取连接”这一步。排查后发现,几个服务各自直连数据库,连接池配置又没收敛,单实例连接数直接顶到了上限。这种场景下,中间件层的分库分表与连接复用能力就成了刚需,而 mycat2 正是这个位置上最常见的选项之一。mycat2 基础安装包解决的,就是把“应用直连 MySQL”改成“应用连 mycat2、mycat2 再按规则转发到后端 MySQL”这件事。它适合正在做分库分表改造、读写分离,或者单纯想给数据库前面加一层连接收敛的开发者。装不好会怎样?最直接的结果是 mycat2 起不来、后端连不上、SQL 解析报错,业务侧看到的仍然是连接超时。这篇笔记按“装什么版本、怎么装、怎么配、坏了怎么救”的顺序走一遍,目标是让你照着敲完能连上后端并跑通一条查询。

2. 装前把环境列清楚:JDK、MySQL 与 mycat2 版本怎么选

2.1 运行环境与版本对照

mycat2 是 Java 写的,运行依赖 JDK,后端依赖 MySQL 协议兼容的数据库。版本选错是新手翻车最多的地方,常见做法是先对齐下面这张表再动手。

组件推荐版本说明
JDK8 或 11mycat2 对 JDK 8 兼容最好,JDK 11 也可运行,17 及以上容易遇到模块反射问题
MySQL5.7 或 8.0后端真实数据库,8.0 需注意驱动版本与认证插件
mycat2基础安装包内自带以包内实际版本为准,不要自行混用其他版本的核心 jar
操作系统Linux x86_64生产环境常见选择,Windows 可用于本地验证

这里要强调一点:mycat2 基础安装包通常已经包含了启动脚本、核心 jar 和默认配置模板,不需要你再去单独下载一堆依赖。我一般会先把包解压到一个固定目录,比如/opt/mycat2,避免路径里带空格或中文,后面写配置和排查日志都省事。

2.2 安装前的系统检查

动手之前先确认三件事:JDK 是否可用、端口是否被占、目录权限是否够。这三步花不了两分钟,但能挡掉后面一半的玄学问题。

# 检查 JDK 版本,确认输出为 1.8 或 11 java -version # 检查 mycat2 默认端口 8066(数据端口)和 9066(管理端口)是否被占用 ss -lntp | grep -E '8066|9066' # 创建安装目录并确认当前用户有写权限 mkdir -p /opt/mycat2 touch /opt/mycat2/.write_test && rm -f /opt/mycat2/.write_test && echo "目录可写"

java -version的输出重点看版本号,如果显示 17 或更高,建议换回 8 或 11,否则启动阶段可能直接抛InaccessibleObjectException。ss -lntp用来确认端口空闲,如果 8066 已被占用,要么停掉占用进程,要么在配置里改端口。最后那个写测试是防止用 root 创建目录后切普通用户启动时权限不足,这种问题日志里往往只报“无法写入”,不细看容易懵。

2.3 解压与目录结构确认

把基础安装包放到/opt下解压,解压后先别急着启动,看一眼目录结构,确认核心文件都在。

cd /opt tar -zxvf mycat2-basic.tar.gz -C /opt/mycat2 --strip-components=1 # 查看关键目录 ls -l /opt/mycat2

常见的基础安装包解压后会有bin、conf、lib、logs这几个目录。bin放启动脚本,conf放配置文件和 schema,lib放核心 jar,logs是运行日志输出位置。如果解压后发现conf是空的,或者lib里 jar 数量明显偏少,说明包不完整,别硬着头皮往下走,换一个完整的包重新解压。--strip-components=1的作用是去掉压缩包自带的那层顶层目录,避免出现/opt/mycat2/mycat2/...这种嵌套路径,后面写启动脚本时路径能短一截。

3. 启动与最小配置:让 mycat2 先跑起来再谈分库分表

3.1 配置文件的最小改动集

mycat2 的配置比早期版本收敛了不少,基础安装包里通常已经带了可用的模板。最小改动集中在两个地方:后端 MySQL 的连接信息和 mycat2 自身的监听配置。先找到conf下的配置文件,常见做法是改datasource相关的配置项。

# conf/datasources/default.yaml 示例结构 name: defaultDs type: mysql url: jdbc:mysql://127.0.0.1:3306/demo_db?useSSL=false&serverTimezone=Asia/Shanghai user: demo_user password: demo_pass

name是这个数据源的逻辑名,后面在 schema 里引用它。url里的127.0.0.1:3306换成你真实的后端 MySQL 地址,demo_db换成实际库名。useSSL=false在测试环境常用,生产环境按实际安全要求调整。serverTimezone建议显式指定,否则 MySQL 8.0 下容易出现时区相关的报错。user和password用后端数据库的真实账号,注意这个账号需要有对应库的查询权限。

3.2 启动脚本与 JVM 参数

配置改完就可以启动。基础安装包的bin目录下一般有startup.sh或类似脚本,直接执行即可。如果脚本里 JVM 参数偏小,可以按机器内存调整。

cd /opt/mycat2/bin sh startup.sh # 查看启动日志,确认没有异常堆栈 tail -n 100 /opt/mycat2/logs/mycat.log

启动脚本里通常会有-Xmx、-Xms这类堆内存参数。测试环境 1G 到 2G 够用,生产环境按并发量和 SQL 复杂度往上调。我一般会把-Xms和-Xmx设成一样的值,避免运行期堆反复伸缩带来的抖动。启动后重点看日志里有没有Started之类的成功标记,以及有没有Connection refused或Access denied这类后端连接错误。如果日志停在某一行不动,多半是后端连不上或者端口被占,回到 2.2 的检查步骤复查。

3.3 用管理端口做一次连通性验证

mycat2 起来之后,别急着让业务连,先用管理端口 9066 登进去看一眼状态。这一步能确认 mycat2 自身是活的,并且能读到后端数据源。

# 用 mysql 客户端连管理端口,默认账号密码以包内说明为准 mysql -h127.0.0.1 -P9066 -uroot -p123456 # 登进去后执行 show datasources;

show datasources会列出当前配置的数据源及其连接状态。如果看到defaultDs的状态是running或类似可用标记,说明 mycat2 到后端 MySQL 的链路是通的。如果显示连接失败,优先检查 3.1 里的 url、账号密码,以及后端 MySQL 是否允许该账号从 mycat2 所在机器连接。管理端口的默认账号密码在基础安装包的说明文件里一般会写,第一次登录后建议改掉,别留着默认值。

4. 避坑与排查:mycat2 安装阶段最常见的五类问题

4.1 启动报 JDK 版本不兼容

现象:执行启动脚本后进程秒退,日志里出现UnsupportedClassVersionError或InaccessibleObjectException。

原因:当前 JDK 版本高于 mycat2 编译时使用的版本,或者 JDK 17 以上模块系统限制了对内部 API 的反射访问。

解决:切回 JDK 8 或 11。用update-alternatives --config java或直接改JAVA_HOME指向正确的 JDK,再重新启动。别想着加一堆--add-opens参数硬扛,基础安装包不是为高版本 JDK 设计的,换版本最省事。

4.2 后端 MySQL 连接被拒

现象:mycat2 能启动,但show datasources显示数据源不可用,日志里有Access denied或Communications link failure。

原因:账号密码错、后端 MySQL 没启动、防火墙挡了 3306,或者 MySQL 8.0 的认证插件与驱动不匹配。

解决:先用mysql -h后端IP -u账号 -p从 mycat2 所在机器直连一次,确认网络和账号没问题。如果是 MySQL 8.0,检查驱动版本是否支持caching_sha2_password,必要时把账号认证方式改成mysql_native_password。防火墙用telnet 后端IP 3306快速判断。

4.3 端口冲突导致启动失败

现象:日志里出现Address already in use,进程起不来。

原因:8066 或 9066 已被其他进程占用,常见于同一台机器上跑了多个实例,或者之前没停干净。

解决:ss -lntp | grep 8066找到占用进程,确认是否可以停掉。如果必须共存,改 mycat2 的监听端口配置,同时记得改客户端连接串里的端口。改完端口后重启,再用管理端口验证。

4.4 配置文件格式错误

现象:启动时报解析异常,日志里指向某个 yaml 或 xml 文件的行号。

原因:yaml 缩进用了 Tab、冒号后没空格、或者复制粘贴时带了不可见字符。

解决:用yamllint或在线 yaml 校验工具过一遍配置文件。我一般会统一用空格缩进,冒号后固定加一个空格,改完再启动。如果是 xml 配置,注意标签闭合和特殊字符转义。

4.5 日志目录权限不足

现象:启动脚本执行后没有明显报错,但日志文件不生成或写入失败。

原因:用 root 解压和创建目录后,切普通用户启动,普通用户对logs目录没有写权限。

解决:chown -R 启动用户:启动用户 /opt/mycat2,把整个安装目录的属主改成实际启动用户。生产环境不建议直接用 root 跑 mycat2,权限收窄一些更稳妥。

5. 装完怎么验证跑通:从管理端口到业务查询的完整链路

验证分三层,一层层过,别跳步。第一层是 mycat2 进程活着,第二层是管理端口能读到数据源,第三层是业务端口能执行真实 SQL 并返回正确结果。

先确认进程和管理端口:

# 确认进程存在 ps -ef | grep mycat | grep -v grep # 管理端口验证数据源 mysql -h127.0.0.1 -P9066 -uroot -p123456 -e "show datasources;"

进程存在且show datasources里数据源状态正常,前两层就算过了。接下来连业务端口 8066,执行一条最简单的查询:

# 连业务端口,库名和账号以实际配置为准 mysql -h127.0.0.1 -P8066 -udemo_user -pdemo_pass -e "select 1;" # 再查一张真实表,确认能路由到后端 mysql -h127.0.0.1 -P8066 -udemo_user -pdemo_pass demo_db -e "select count(*) from demo_table;"

select 1验证的是 mycat2 自身能否响应查询,不涉及后端路由。select count(*) from demo_table验证的是 SQL 解析、路由和后端执行整条链路。如果第一条过、第二条报“表不存在”或“无法路由”,说明 schema 配置里没有把这张表映射到正确的数据源,回到conf下的 schema 配置检查表名和分片规则。如果两条都过,说明基础安装已经跑通,可以开始接业务做灰度了。

我自己的习惯是,每次装完 mycat2,不管多急,都强制走一遍“管理端口看数据源 → 业务端口 select 1 → 业务端口查真实表”这三步。有一次跳过第二步直接上业务,结果业务端口监听配置写错了,排查了半小时才发现是端口对不上。从那以后这三步就成了固定动作。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询