-
准备与说明
场景
根据数据表日期类型字段,手动配置分片。这里举例:登录信息表(login_info)根据登录时间字段(login_date)的将数据存储到不同的节点
拆分方案及定义
- 在文章 https://blog.csdn.net/shuair/article/details/118885670(mycat水平分表) 描述内容的基础上,添加支付信息表(payment_info)
- mycat逻辑库:TESTDB103
- mysql物理库:两个节点,库名均为orders103
准备:提前搭建好mycat,可以参考文章:https://blog.csdn.net/shuair/article/details/118546292
-
修改schema.xml
警告:所有的schema写在一起、所有的dataNode写在一起、所有的dataHost写在一起
<table name="login_info" dataNode="dn10301,dn10302" rule="orders-sharding-by-date"></table>
-
修改rule.xml
警告:所有的tableRule写在一起、所有的function写在一起
<!-- 省略其它tableRule -->
<!-- 配置一个分表规则 -->
<tableRule name="orders-sharding-by-date">
<rule>
<!-- 分片字段 -->
<columns>login_date</columns>
<!-- 分片算法 -->
<algorithm>orderspartbyday</algorithm>
</rule>
</tableRule>
<!-- 省略其它function -->
<!-- 定义分片算法,后面有写好的算法partbyday,复制一份,调整内容即可 -->
<function name="orderspartbyday" class="io.mycat.route.function.PartitionByDate">
<!-- 需要的日期格式 -->
<property name="dateFormat">yyyy-MM-dd</property>
<!-- 起始日期 -->
<property name="sBeginDate">2021-01-01</property>
<!-- 结束日期,设定了结束日期,则超过结束日期后会回到开始的节点循环分片,未设定结束日期时,数据无法分配到现有的节点上就会报错 -->
<property name="sEndDate">2021-01-04</property>
<!-- 分区天数,几天分到一片 -->
<property name="sPartionDay">2</property>
</function>
重启mycat
-
创建数据表
可以在mycat窗口创建数据表,但是可能会出现异常,这里直接在mysql数据库创建表,两个节点分别创建支付信息表 (login_info)
DROP TABLE IF EXISTS login_info;
CREATE TABLE login_info ( `id` INT auto_increment PRIMARY KEY COMMENT '主键', `user_id` INT COMMENT '用户编号', `login_date` date COMMENT '登录日期' );
-
添加测试数据
在mycat窗口添加测试数据
INSERT INTO login_info ( id, user_id, login_date ) VALUES ( 1, 101, '2021-01-01' );
INSERT INTO login_info ( id, user_id, login_date ) VALUES ( 2, 102, '2021-01-02' );
INSERT INTO login_info ( id, user_id, login_date ) VALUES ( 3, 103, '2021-01-03' );
INSERT INTO login_info ( id, user_id, login_date ) VALUES ( 4, 104, '2021-01-04' );
INSERT INTO login_info ( id, user_id, login_date ) VALUES ( 5, 103, '2021-01-05' );
INSERT INTO login_info ( id, user_id, login_date ) VALUES ( 6, 104, '2021-01-06' );
此时查看两个数据库节点就可以看到数据的分片效果了:数据1、2、5、6在节点1上,数据3、4在节点2上
此时mycat按照日期分片就配置完成了