MyCat 分库分表实验手册(垂直分库+水平分表+读写分离)
一、实验概述
1.1 实验目标
- 掌握MyCat三大核心配置文件用法
- 实现垂直分库:user表独立存入db1
- 实现水平分表:order1表按id取模拆分db2、db3
- 搭建一主两从架构,实现MyCat读写分离
- 完成分库分表、读写分离功能校验
1.2 实验环境
- MyCat服务端:node1节点
- MySQL主库:192.168.65.110
- MySQL从库1:192.168.65.120
- MySQL从库2:192.168.65.130
- 数据库账号:spring 密码:spring
- MyCat逻辑库:TESTDB
- 连接端口:数据端口8066、管理端口9066
1.3 配置文件作用
- server.xml:配置MyCat登录用户、密码、逻辑库权限
- schema.xml:配置逻辑库、逻辑表、数据节点、主从数据源
- rule.xml:配置水平分表分片规则与算法
二、实验前置准备
2.1 主库创建物理库与授权
登录192.168.65.110主库执行SQL
CREATE DATABASE db1;
CREATE DATABASE db2;
CREATE DATABASE db3;
GRANT ALL PRIVILEGES ON *.* TO 'spring'@'%' IDENTIFIED BY 'spring';
FLUSH PRIVILEGES;
2.2 主库创建业务数据表
-- db1创建用户表
USE db1;
CREATE TABLE user(
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20),
age INT
);
-- db2、db3创建订单表
USE db2;
CREATE TABLE order1(
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
order_no VARCHAR(30)
);
USE db3;
CREATE TABLE order1(
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
order_no VARCHAR(30)
);
2.3 主从同步搭建
完成三台MySQL主从复制,保证主库数据自动同步至两台从库。
2.4 替换MyCat配置文件
将整理好的server.xml、schema.xml、rule.xml放入MyCat/conf目录下。
三、完整配置文件内容
3.1 server.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="nonePasswordLogin">0</property>
<property name="useHandshakeV10">1</property>
<property name="sqlExecuteTimeout">300</property>
</system>
<user name="spring" defaultAccount="true">
<property name="password">spring</property>
<property name="schemas">TESTDB</property>
</user>
</mycat:server>
3.2 schema.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<table name="user" dataNode="dn1" primaryKey="id" />
<table name="order1" dataNode="dn2,dn3" primaryKey="id" rule="mod-long" />
</schema>
<dataNode name="dn1" dataHost="hostM" database="db1" />
<dataNode name="dn2" dataHost="hostM" database="db2" />
<dataNode name="dn3" dataHost="hostM" database="db3" />
<dataHost name="hostM" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1">
<heartbeat>select 1</heartbeat>
<writeHost host="M1" url="192.168.65.110:3306" user="spring" password="spring">
<readHost host="S1" url="192.168.65.120:3306" user="spring" password="spring" />
<readHost host="S2" url="192.168.65.130:3306" user="spring" password="spring" />
</writeHost>
</dataHost>
</mycat:schema>
核心参数说明
- balance="1":开启读写分离,查询分流至从库
- writeType="0":所有写入操作仅走主库
- switchType="1":主库故障自动切换
3.3 rule.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
<tableRule name="mod-long">
<rule>
<columns>id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<property name="count">2</property>
</function>
</mycat:rule>
分片规则
- 分片字段:id
- 分片算法:对2取模
- id%2=0 存入dn2(db2)
- id%2=1 存入dn3(db3)
四、MyCat服务启停与连接
4.1 启停命令
# 启动
mycat start
# 停止
mycat stop
# 重启
mycat restart
# 查看状态
mycat status
# 查看日志
tail -f /usr/local/mycat/logs/wrapper.log
4.2 连接MyCat逻辑库
mysql -uspring -pspring -h127.0.0.1 -P8066
use TESTDB;
五、功能验证实验
5.1 垂直分库验证
- MyCat端插入数据
insert into user(id,username,age) values(1,'张三',20),(2,'李四',22);
- 登录主库查看
use db1;
select * from user;
- 实验结论:user表数据仅存储在db1,垂直分库生效。
5.2 水平分表验证
- MyCat端插入测试数据
insert into order1(id,user_id,order_no) values(1,1,'OD001'),(2,2,'OD002'),(3,1,'OD003');
- 主库分别查询db2、db3
use db2; select * from order1;
use db3; select * from order1;
- 实验结论:id偶数存db2,奇数存db3,分片规则生效,MyCat可聚合查询全部数据。
5.3 读写分离验证
- 两台从库执行停止同步
stop slave;
- MyCat新增一条user数据
insert into user(id,username,age) values(5,'王五',25);
- 主库可查询新数据,多次在MyCat执行查询无法查到,证明查询走从库。
- 恢复从库同步
start slave;
5.4 跨表联表查询
select u.username,o.order_no from user u left join order1 o on u.id=o.user_id;
实验结论:MyCat支持跨数据节点联合查询。
六、常见故障排查
- 启动报错:检查XML标签闭合、特殊字符、配置缩进格式
- 连接数据库失败:核对IP、端口、账号密码,关闭防火墙
- 分片数据错乱:核对rule.xml分片数量与dataNode数量一致
- 读写分离失效:确认balance参数配置正确,从库心跳检测正常
- 表不存在错误:物理库提前建好对应数据表,禁止使用order关键字建表
七、实验总结
- 完成MyCat一主两从读写分离架构部署
- 熟练区分垂直分库、水平分表业务场景
- 掌握取模分片算法配置与数据路由规则
- 具备MyCat日常运维、启停、日志排错基础能力
- 实现应用直连MyCat,无感访问分片数据库
浙公网安备 33010602011771号