教程与案例
入门教程
1. Mycat 安装与首次配置
本节介绍如何在Linux环境下安装Mycat并进行基本配置。
Mycat1.6 安装步骤
# 1. 下载
wget http://dl.mycat.org.cn/1.6-RELEASE/Mycat-server-1.6-RELEASE-linux.tar.gz
# 2. 解压
tar -zxvf Mycat-server-1.6-RELEASE-linux.tar.gz -C /usr/local/
# 3. 配置环境变量
echo 'export MYCAT_HOME=/usr/local/mycat' >> /etc/profile
echo 'export PATH=$PATH:$MYCAT_HOME/bin' >> /etc/profile
source /etc/profile
# 4. 修改server.xml中用户密码
vim conf/server.xml
# 5. 修改schema.xml 配置数据节点
vim conf/schema.xml
# 6. 启动
./bin/mycat start
# 7. 检查状态
./bin/mycat status
tail -f logs/wrapper.log
Mycat2 安装步骤
# 1. 下载Mycat2安装包
# 访问 https://github.com/MyCATApache/Mycat2/releases
# 2. 解压
unzip mycat2-1.22-release.zip -d /usr/local/mycat2
# 3. 配置数据源
vim conf/datasources/prototypeDs.datasource.json
# 4. 启动
# Windows:
bin/startup_nowrap.bat
# Linux:
./bin/startup_nowrap.sh
# 5. 连接测试
mysql -h127.0.0.1 -P8066 -uroot
2. 读写分离配置教程
配置Mycat实现MySQL读写分离,写请求发送到主库,读请求分发到从库。
Mycat1.6 读写分离
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.1.100:3306" user="root" password="123456">
<readHost host="hostS1" url="192.168.1.101:3306" user="root" password="123456" />
<readHost host="hostS2" url="192.168.1.102:3306" user="root" password="123456" />
</writeHost>
</dataHost>
3. 分表分库实操
以一个电商订单系统为例,演示如何使用Mycat分片。
需求场景
- 订单表 orders: 按 order_id 取模分片到4个节点
- 用户表 users: 按 user_id 取模分片到4个节点
- 商品表 products: 全局表,所有节点一致
Mycat1.6 配置
# schema.xml
<schema name="ecommerce" checkSQLschema="false" sqlMaxLimit="100">
<table name="orders" dataNode="dn1,dn2,dn3,dn4" rule="mod-long">
<childTable name="order_items" primaryKey="id"
joinKey="order_id" parentKey="id" />
</table>
<table name="users" dataNode="dn1,dn2,dn3,dn4" rule="mod-user-long" />
<table name="products" type="global" dataNode="dn1,dn2,dn3,dn4" />
</schema>
# rule.xml
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<property name="count">4</property>
</function>
进阶教程
4. 跨分片查询优化
| 策略 | 说明 |
|---|---|
| 分片键查询 | 始终带分片键,确保单体路由 |
| 全局表 | 高频关联的小表设为全局表 |
| ER关系 | 使用ER子表减少跨分片JOIN |
| 应用层聚合 | 复杂聚合在应用层完成 |
生产案例分享
案例1: 电商平台订单系统
- 规模: 日均1亿订单,峰值QPS 50K
- 方案: 32个MySQL节点,按order_id取模分片
- 架构: HAProxy + Mycat + MySQL主从
- 效果: 读写分离使得读性能提升3倍,主库压力降低80%
案例2: 物联网数据平台
- 规模: 10万台设备,每小时上报一次数据
- 方案: 按设备ID一致性哈希分片+按日期分表
- 效果: 单表数据量控制在500万以内,查询延迟 < 50ms
案例3: 金融对账系统
- 需求: 高一致性、高可用、不丢数据
- 方案: Mycat + MySQL MHA + XA事务
- 效果: 故障切换 < 30秒,数据零丢失
最佳实践: 设计分片策略前,先梳理清楚业务SQL模式。分片键的选择是分片架构中最关键的决策。