大家好呀~ 我是云扬!最近做项目遇到了 MySQL 性能瓶颈,单库单表数据量飙到百万后,查询速度肉眼可见变慢😭 对比了 Sharding-JDBC、ProxySQL 等中间件,最终选择了 MyCAT—— 配置简单、稳定性强,新手也能快速上手!今天就把我的完整实战过程整理出来,从安装到配置一步不落,还汇总了踩坑记录,正在被数据库性能困扰的小伙伴赶紧码住~
一、为什么选 MyCAT?3 大核心优势✨
作为后端开发,数据库扩容是绕不开的坎!MyCAT 作为开源数据库中间件,完美解决 3 个关键问题:✅读写分离:写操作走主库,读请求分散到从库,读性能直接提升 30%+✅分库分表:应用层不用管底层物理库拆分,MyCAT 自动路由合并结果✅故障切换:主库宕机自动切从库,无需人工干预,系统可用性拉满简单说,MyCAT 就是数据库的 "智能代理",让你不用改一行代码,就能实现数据库扩容~
二、实战部署:3 台服务器环境配置🖥️
- 3 台 MySQL 实例(151 主库、152 从库、153 部署 MyCAT)
- 操作系统:CentOS 7(Windows、Ubuntu 也可参考,命令稍作调整)
1. 前置准备:安装 JDK(必做!)
MyCAT 是 Java 开发的,必须装 JDK 1.8(高版本会不兼容哦):# 一键安装JDK 1.8,无需手动配置环境变量yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel -y# 验证是否成功(出现版本号就OK)java -version
2. 下载 MyCAT 安装包 + 核心 jar 包
# 进入存放源码的目录cd /usr/src# 下载MyCAT安装模板(保存好链接,避免失效)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)执行 SQL,给 MyCAT 开权限:-- 创建MyCAT专用用户(用户名:mycat_rw,密码:Ud9_a8Gca1)CREATE USER 'mycat_rw'@'%' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'Ud9_a8Gca1';-- 授予所有权限(测试环境用,生产环境可按需缩减)GRANT all ON *.* TO 'mycat_rw'@'%';FLUSH PRIVILEGES; -- 刷新权限(踩坑提醒:千万别忘这步!)-- 创建逻辑库对应的物理库create database mycat;
4. 3 个核心配置文件修改(重点!)
这部分决定 MyCAT 能否正常工作,我整理了最关键的配置项,其他默认即可:(1)数据源配置(连接 MySQL 主库)
# 编辑配置文件cd /usr/local/mycat/vim conf/datasources/prototypeDs.datasource.json
{ "password": "Ud9_a8Gca1", // 刚才创建的MySQL用户密码 "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" // 主库设为读写模式}
(2)MyCAT 登录账号配置
vim conf/users/root.user.json
{ "dialect": "mysql", "ip": null, // 允许所有IP访问(生产环境可指定具体IP) "password": "UdYca86a", // MyCAT登录密码 "transactionType": "proxy", // 本地事务(分布式事务设为XA) "username": "mycat" // MyCAT登录用户名}
(3)主从集群配置
vim conf/clusters/prototype.cluster.json
{ "clusterType": "MASTER_SLAVE", // 主从集群 "heartbeat": "show status like 'wsrep%'", // 心跳检测 "masters": ["prototypeDs"], // 主数据源(和上面配置对应) "name": "prototype", "readBalanceType": "BALANCE_ALL_READ", // 所有从库参与读负载均衡 "switchType": "SWITCH" // 允许主从自动切换}
5. 启动 MyCAT 并验证
# 赋予执行权限chmod +x ./bin/*# 启动MyCAT(首次启动可能要等30秒)./bin/mycat start# 查看启动状态(出现"running"就是成功啦)./bin/mycat status# 启动失败?查看日志排查tail -f /usr/local/mycat/logs/wrapper.log
6. 测试连接:是否配置成功?
用 MySQL 客户端连接 MyCAT(端口 8066 是默认数据端口):mysql -umycat -p'UdYca86a' -P8066 -h192.168.184.153
连接成功后执行 show databases;,能看到 mycat 库就说明配置没问题啦🎉
三、常用命令 + 避坑指南🚨
1. MyCAT 常用操作
./bin/mycat start # 启动./bin/mycat stop # 停止./bin/mycat restart# 重启./bin/mycat status # 查看状态
2. 新手必踩的 4 个坑(附解决方案)
❌ 忘记刷新 MySQL 权限 → 执行 FLUSH PRIVILEGES; 即可❌ JDK 版本过高 → 必须用 1.8 版本,高版本不兼容❌数据源 URL 漏写编码 / 时区 → 加上 useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai❌ 集群配置中 masters 参数不匹配 → 必须和数据源配置文件名一致(如 prototypeDs)3. 生产环境注意事项
- 定期备份 MyCAT 配置文件,避免误操作无法恢复
如果大家有具体的需求或问题,欢迎在评论区留言交流~ 觉得有用的话,记得点赞 + 在看 + 转发给身边的小伙伴呀!❤️