教程与案例

入门教程

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模式。分片键的选择是分片架构中最关键的决策。