【MySQL】MyCAT 实战指南:从安装到配置的完整攻略(附避坑技巧)
大家好,我是云扬~ 最近在项目中需要解决 MySQL 的读写分离和分库分表问题,对比了多款中间件后最终选择了 MyCAT。这篇博客就来详细记录我的实战过程,从核心作用、架构原理到一步步安装配置,希望能帮到正在踩坑的小伙伴~
一、为什么选择 MyCAT?核心作用拆解
做后端开发的同学都知道,当数据库数据量达到一定规模,单库单表的性能瓶颈会越来越明显。MyCAT 作为开源的数据库中间件,完美解决了这三个核心问题:
- 读写分离:写操作走主库,读请求分散到多个从库,直接减轻主库压力(实测读性能提升 30%+)
- 分库分表:应用层只需连接 MyCAT 的逻辑库,无需关心底层物理库的拆分,MyCAT 会自动路由并合并结果
- 故障切换:主库宕机后可自动切换到从库,无需人工干预,大大提升系统可用性
二、MyCAT 核心架构解析
刚开始接触时有点懵,理清逻辑后其实很简单:

- 客户端连接的是 MyCAT 的「逻辑库」(比如我配置的
mycat库),背后映射 N 个 MySQL「物理库」(如 db01、db02) - 我们操作的「逻辑表」(table),实际对应多个物理表(如 table01、table02)
- 工作流程:客户端 SQL → MyCAT 解析(判断读写 / 分片)→ 路由到对应物理库 → 结果合并 → 返回客户端
简单说,MyCAT 就是一个 “中间代理”,让应用层无需关心底层数据库的复杂架构。
三、实战部署:3 台服务器环境配置
先说明我的环境:3 台 MySQL 实例(151 为主库、152 为从库、153 单独部署 MyCAT),操作系统均为 CentOS 7。
1. 前置依赖:安装 JDK
MyCAT 基于 Java 开发,必须先装 JDK 1.8(注意:高版本可能不兼容):
# 一键安装JDK 1.8
yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel -y
# 验证安装成功(出现版本号即可)
java -version
2. 下载并解压 MyCAT
MyCAT 2.x版本需下载“安装模板”和“核心JAR包”,操作如下:
# 进入源码目录
cd /usr/src
# 下载安装包(建议保存链接,避免失效)
wget http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.21.zip
# 解压(需提前装unzip:yum install unzip -y)
unzip mycat2-install-template-1.21.zip
# 下载核心jar包(关键步骤,不能漏!)
cd mycat/lib/
wget http://dl.mycat.org.cn/2.0/1.21-release/mycat2-1.21-release-jar-with-dependencies.jar
# 移动到常用目录
mv /usr/src/mycat /usr/local
3. 配置 MySQL 授权
在主库(192.168.184.151)创建 MyCAT 专用连接用户,授予所有权限:
-- 1. 创建MyCAT连接用户(允许所有IP访问,密码Ud9_a8Gca1)
CREATE USER 'mycat_rw'@'%' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'Ud9_a8Gca1';
-- 2. 授予该用户所有库表的权限(生产环境可按需缩小权限范围)
GRANT ALL ON *.* TO 'mycat_rw'@'%';
-- 3. 创建MyCAT连接的逻辑库(后续MyCAT配置将指向该库)
CREATE DATABASE mycat;
4. 核心配置文件修改
这部分是重点,我整理了关键配置文件的修改要点:
(1)数据源配置(连接 MySQL 主库)
cd /usr/local/mycat/
vim conf/datasources/prototypeDs.datasource.json
修改以下核心参数(其他默认即可):
{
"password": "Ud9_a8Gca1", // 主库mycat_rw用户密码
"type": "JDBC",
"url": "jdbc:mysql://192.168.184.151:3306/mycat?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
"user": "mycat_rw",
"instanceType": "READ_WRITE" // 读写模式(从库设为READ)
}
(2)MyCAT 登录用户配置
vim conf/users/root.user.json
修改登录账号密码(应用层连接 MyCAT 时使用):
{
"dialect": "mysql",
"ip": null, // 建议设为null,允许所有IP访问(生产环境可指定IP)
"password": "UdYca86a", // MyCAT登录密码
"transactionType": "proxy", // 事务类型(proxy=本地事务,XA=分布式事务)
"username": "mycat" // MyCAT登录用户名
}
注意:若需创建多个MyCAT访问用户,可复制该文件并命名为“用户名.user.json”(如
test.user.json)。
(3)集群配置(主从模式)
vim conf/clusters/prototype.cluster.json
关键配置说明:
{
"clusterType": "MASTER_SLAVE", // 主从集群模式
"heartbeat": "show status like 'wsrep%'", // 心跳检测SQL
"masters": ["prototypeDs"], // 主数据源(对应上面的配置)
"name": "prototype",
"readBalanceType": "BALANCE_ALL_READ", // 读负载均衡(所有从库参与)
"switchType": "SWITCH" // 允许主从切换
}
5. 启动 MyCAT 并验证
# 赋予执行权限
chmod +x ./bin/*
# 启动(首次启动可能较慢,耐心等待)
./bin/mycat start
# 查看状态(出现"MyCAT Server is running"即为成功)
./bin/mycat status
# 查看日志(启动失败时排查用)
tail -f /usr/local/mycat/logs/wrapper.log
6. 登录 MyCAT 测试
MyCAT默认数据访问端口为8066,192.168.184.153上使用MySQL客户端工具登录:
# 用MySQL客户端连接(端口8066是MyCAT默认数据端口)
mysql -umycat -p'UdYca86a' -P8066 -h192.168.184.153
# 连接成功后,执行SQL验证
show databases;

四、MyCAT关键配置文件详解
MyCAT的核心能力通过配置文件实现,以下是常用配置文件的功能与关键参数说明。
1. 服务配置:server.json
路径:/usr/local/mycat/conf/server.json
作用:定义MyCAT的服务端口、线程池、日志等全局配置,无需频繁修改,默认即可满足基础需求。

2. 用户配置:xxx.user.json
路径:/usr/local/mycat/conf/users/
命名规则:用户名.user.json(如mycat.user.json)
关键参数:
transactionType:事务类型,proxy(本地事务,适用于单库操作)、XA(分布式事务,适用于跨库操作,需后端MySQL支持);- 可通过SQL动态查询/修改事务类型:
-- 查询当前事务类型
SELECT @@transaction_policy;
-- 修改为分布式事务(XA)
SET transaction_policy = 'xa';

3. 数据源配置:xxx.datasource.json
路径:/usr/local/mycat/conf/datasources/
命名规则:数据源名.datasource.json(如prototypeDs.datasource.json)
关键参数:
| 参数 | 说明 |
dbType | 数据库类型(如mysql) |
idleTimeout | 空闲连接超时时间(毫秒) |
instanceType | 实例类型(READ_WRITE=读写,READ=只读,WRITE=只写) |
maxCon | 最大连接数(避免连接过多导致数据库压力) |
minCon | 最小空闲连接数(保证快速响应) |
url | JDBC连接地址(IP+端口+库名+参数) |

4. 逻辑库表配置:mysql.schema.json
路径:/usr/local/mycat/conf/schemas/mysql.schema.json
作用:关联逻辑库与后端数据源/集群,关键参数:
schemaName:客户端连接MyCAT时使用的逻辑库名(如mycat);targetName:关联的数据源或集群名(如prototype,对应集群配置文件)。

5. 集群配置:xxx.cluster.json
路径:/usr/local/mycat/conf/clusters/prototype.cluster.json
作用:配置主从集群、负载均衡策略、故障切换规则,关键参数:
| 参数 | 说明 |
clusterType | 集群类型(MASTER_SLAVE=主从,SINGLE_NODE=单节点,GENERAL_CLUSTER=PXC集群) |
readBalanceType | 读负载均衡策略(BALANCE_ALL=所有节点,BALANCE_ALL_READ=只读节点,BALANCE_READ_WRITE=读写节点优先读) |
switchType | 故障切换类型(SWITCH=自动切换,NOT_SWITCH=不切换) |
heartbeat | 心跳检测SQL(默认select 1,用于检测节点存活) |

五、常用操作与避坑总结
1. 常用命令
./bin/mycat stop # 停止
./bin/mycat restart # 重启
./bin/mycat status # 查看状态
2. 踩坑记录
- 忘记刷新 MySQL 权限:导致 MyCAT 连接主库失败,执行
FLUSH PRIVILEGES即可 - JDK 版本不兼容:高版本 JDK 会导致 MyCAT 启动报错,务必用 1.8 版本
- 数据源 URL 错误:漏写编码或时区参数,导致中文乱码或连接超时
- 集群配置错误:masters 参数未对应数据源名称,导致主从切换失败
3. 注意事项
- 生产环境建议配置多个从库,提升读性能
- 分布式事务需确保后端 MySQL 支持 XA 协议
- 定期备份配置文件,避免修改错误无法回滚



