一、 常用分片规则
1、取模
此规则为对分片字段求摸运算。也是水平分表最常用规则
2、分片枚举
通过在配置文件中配置可能的枚举 id,自己配置分片,本规则适用于特定的场景,比如有些业务需要按照省份或区县来做保存,而全国省份区县固定的,这类业务使用本条规则。
实现方式如下:
2.1、修改schema.xml配置文件
![> [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I3bFd6zV-1668606531894)(assets/1657606799331.png)]](https://img-blog.csdnimg.cn/a9fa823823414111a82516b92616766b.png)
测试表为orders_ware_info,配置在dn1和dn2节点,规则是新增一个sharding_by_intfile
2.2、修改rule.xml配置文件
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uTGUOEg0-1668606531896)(assets/1657607036319.png)]](https://img-blog.csdnimg.cn/3f499d1617cf42358c4c742a8281aa59.png)
2.3、修改partition-hash-int.txt配置文件

表示areacode为110就存到第一个数据节点,为120就存到第二个数据节点
2.4、重启 Mycat使配置生效

使用mycat创建订单归属区域信息表:
CREATE TABLE orders_ware_info (
`id` INT AUTO_INCREMENT comment '编号',
`order_id` INT comment '订单编号',
`address` VARCHAR(200) comment '地址',
`areacode` VARCHAR(20) comment '区域编号',
PRIMARY KEY(id)
);
插入数据:
INSERT INTO ORDERS_WARE_INFO(id, order_id,address,areacode) VALUES (1,1,'北京','110');
INSERT INTO ORDERS_WARE_INFO(id, order_id,address,areacode) VALUES (2,2,'天津','120');

通过数据库直接查询:
spdb_pzex:

spdb_portal_wechat:

3、范围约定
此分片适用于,提前规划好分片字段某个范围属于哪个分片。
3.1、修改schema.xml配置文件

上面定义表以及所存储的数据节点和分片规则等
3.2、修改rule.xml配置文件


3.3、修改autopartition-long.txt配置文件

3.4、重启 Mycat使配置生效

在mycat中创建支付信息表payment_info:
CREATE TABLE payment_info(
`id` INT AUTO_INCREMENT comment '编号',
`order_id` INT comment '订单编号',
`payment_status` INT comment '支付状态',
PRIMARY KEY(id)
);
插入数据:
INSERT INTO PAYMENT_INFO (id,order_id,payment_status) VALUES (1,101,0);
INSERT INTO PAYMENT_INFO (id,order_id,payment_status) VALUES (2,102,1);
INSERT INTO PAYMENT_INFO (id,order_id,payment_status) VALUES (3,103,0);
INSERT INTO PAYMENT_INFO (id,order_id,payment_status) VALUES (4,104,1);

分别查看两个host数据节点的数据:
spdb_pzex:

spdb_portal_wechat:

4、按日期(天)分片
此规则为按天分片。设定时间格式、范围
4.1、修改schema.xml配置文件

4.2、修改rule.xml配置文件

需要自定义一个分片函数shardingByDate:

4.3、重启 Mycat使配置生效重启

在mycat中创建用户信息表login_info:
CREATE TABLE login_info(
`id` INT AUTO_INCREMENT comment '编号',
`user_id` INT comment '用户编号',
`login_date` date comment '登录日期',
PRIMARY KEY(id)
);
插入数据:
INSERT INTO LOGIN_INFO(id,user_id,login_date) VALUES (1,101,'2019-01-01');
INSERT INTO LOGIN_INFO(id,user_id,login_date) VALUES (2,102,'2019-01-02');
INSERT INTO LOGIN_INFO(id,user_id,login_date) VALUES (3,103,'2019-01-03');
INSERT INTO LOGIN_INFO(id,user_id,login_date) VALUES (4,104,'2019-01-04');
INSERT INTO LOGIN_INFO(id,user_id,login_date) VALUES (5,103,'2019-01-05');
INSERT INTO LOGIN_INFO(id,user_id,login_date) VALUES (6,104,'2019-01-06');

分别查看两个host数据节点的数据:
spdb_pzex:

spdb_portal_wechat:
![> [)(assets/1657608068820.png)]](https://img-blog.csdnimg.cn/16c9f31d6e074fd897068248a0aa0899.png)
二、mycat高可用
https://blog.csdn.net/K_520_W/article/details/123781475



















