根据实际工作中的需要,有些业务只有部分表较大,因此不需要整体做分库分表,整理只分表不分库的一种实现方式。
下面是核心配置文件
server.xml
<user name="test" defaultAccount="true">
<property name="password">****</property>
<property name="schemas">自定义</property>
</user>
schema.ml
<schema name="GBES" checkSQLschema="false">
<table name="project" primaryKey="project_id" dataNode="hrDataNode" subTables="open_project_$1-4" rule="sharding-by-date" />
</schema>
<dataNode name="hrDataNode" dataHost="testHost" database="gbes_test" />
<dataHost name="localhost1" maxCon="1000" minCon="100" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="10.0.xxx.xx:3306" user="root" password="****">
<readHost host="hostS1" url="10.0.xxx.xx:3306" user="root" password="****" />
</writeHost>
</dataHost>
rule.xml
<!-- 按照60天分表 -->
<tableRule name="sharding-by-date60">
<rule>
<!-- 指定用于分片的字段 -->
<columns>create_time</columns>
<algorithm>partbyday60</algorithm>
</rule>
</tableRule>
<!-- 按照360天分表 -->
<tableRule name="sharding-by-date360">
<rule>
<!-- 指定用于分片的字段 -->
<columns>create_time</columns>
<algorithm>partbyday360</algorithm>
</rule>
</tableRule>
<function name="partbyday60"
class="io.mycat.route.function.PartitionByDate">
<!-- 日期格式 -->
<property name="dateFormat">yyyy-MM-dd</property>
<!-- 支持自然日分区属性 -->
<property name="sNaturalDay">0</property>
<!-- 开始日期 -->
<property name="sBeginDate">2022-11-01</property>
<!-- 结束日期 -->
<property name="sEndDate">2027-12-30</property>
<!-- 每隔几天算一个分片 -->
<property name="sPartionDay">60</property>
</function>
<function name="partbyday60"
class="io.mycat.route.function.PartitionByDate">
<!-- 日期格式 -->
<property name="dateFormat">yyyy-MM-dd</property>
<!-- 支持自然日分区属性 -->
<property name="sNaturalDay">0</property>
<!-- 开始日期 -->
<property name="sBeginDate">2022-11-01</property>
<!-- 结束日期 -->
<property name="sEndDate">2027-12-30</property>
<!-- 每隔几天算一个分片 -->
<property name="sPartionDay">360</property>
</function>
测试验证:
INSERT INTO project
(project_id, project_name, project_code, create_time,)
VALUES('1717517955133325313', 'WYY-项目', '123', '2024-01-26 20:26:05');
INSERT INTO project
(project_id, project_name, project_code, create_time,)
VALUES('1717517955133325313', 'WYY-项目', '123', '2024-03-27 11:07:50');
INSERT INTO project
(project_id, project_name, project_code, create_time,)
VALUES('1717517955133325313', 'WYY-项目', '123', '2024-02-27 14:53:26');
数据分别进入三张不同的表