项目背景
旧项目为停车场项目,停车记录数据持续增长,所以这里以停车记录(parking_record)分片为例。
分片配置
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--未配置分片的表走dn0,配置了分片的表走分片dataNode-->
<schema name="parkingDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn0">
<!-- 按车场id取模分片-->
<table name="parking_record" primaryKey="parking_lot_id" dataNode="dn1,dn2,dn3" rule="mod-long"/>
</schema>
<dataNode name="dn0" dataHost="localhost1" database="parking-dev-db0"/>
<dataNode name="dn1" dataHost="localhost1" database="parking-dev-db1"/>
<dataNode name="dn2" dataHost="localhost1" database="parking-dev-db2"/>
<dataNode name="dn3" dataHost="localhost1" database="parking-dev-db3"/>
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select 1</heartbeat>
<writeHost host="hostS1" url="127.0.0.1:3306" user="root" password="123456"/>
</dataHost>
</mycat:schema>
说明:
1、配置了一个mycat逻辑库:parkingDB
2、配置了4个数据节点:dn0,dn1,dn2,dn3
3、其中dn0作为默认节点,未分片的表走该节点查询数据
4、配置分片的表走配置的数据节点查询数据
db0主数据节点
1、主节点包含工程里的所有表信息(可以不包含分片表)
db1,db2,db3分片数据节点
1、mycat连接中执行分片表的创建语句会自动在对应的分片数据节点上创建表,无需单个单个创建
2、可以看到分片数据节点目前只有parking_record一张表
连接mycat测试
// mysql怎么连mycat就怎么连,只不过端口改成mycat连接端口(例如8066)
mysql -uroot -p -P8066 -h127.0.0.1
ps:heidisql工具看不到表数据请忽略(但是执行sql语句都能查询到信息)
测试查询主节点数据
select * from sys_user;
执行成功
测试分片表查询
select * from parking_record;
执行成功
程序数据源配置
切换非常简单,只需要将原来的mysql连接信息替换为mycat的ip端口账户等信息即可
配置完毕,项目重启,基本不会有什么问题。