1、开发中遇到的问题
历史数据表随着业务的增长已经有4-5个亿的数据,之前是按照定时任务每月创建一个表,插入的时候根据当前的时间来将数据插入到当前表,联查的时候跨月查是个问题,刚好有个新项目尝试使用了Mycat来解决该问题,采用两个库对历史表进行分片。
2、Mycat整合步骤
2.1在两台服务器上安装Mysql(这里用mysql-5.7.26)(https://note.youdao.com/s/KlTcX694)
2.2安装Mycat(这里使用1.6版本)
解压之后进入Mycat的conf目录进行配置:
2.2.1 schema.xml
<schema name="xinchai" checkSQLschema="false" sqlMaxLimit="100">
<!-- auto sharding by id (long) -->
<!-- <table name="user_profile" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" /> -->
<!-- global table is auto cloned to all defined data nodes ,so can join
with any table whose sharding node is in the same data node -->
<table name="history" primaryKey="id" autoIncrement="true" dataNode="distribute(dn1$0-6,dn2$0-6)" rule="sharding-by-date-customer" />
<table name="mycat_sequence" dataNode="dn10" autoIncrement="true" primaryKey="id"></table>
</schema>
注意:
1、关键的有两个表,一个是业务表history和序列表mycat_sequence
2、dataNode为数据节点,在<dataNode />中配置,我用了两个服务器,配置了14个分片节点,如下:
<dataNode name="dn10" dataHost="datahost1" database="test" />
<dataNode name="dn11" dataHost="datahost1" database="test-db1" />
<dataNode name="dn12" dataHost="datahost1" database="test-db2" />
<dataNode name="dn13" dataHost="datahost1" database="test-db3" />
<dataNode name="dn14" dataHost="datahost1" database="test-db4" />
<dataNode name="dn15" dataHost="datahost1" database="test-db5" />
<dataNode name="dn16" dataHost="datahost1" database="test-db6" />
<dataNode name="dn20" dataHost="datahost2" database="test" />
<dataNode name="dn21" dataHost="datahost2" database="test-db1" />
<dataNode name="dn22" dataHost="datahost2" database="test-db2" />
<dataNode name="dn23" dataHost="datahost2" database="test-db3" />
<dataNode name="dn24" dataHost="datahost2" database="test-db4" />
<dataNode name="dn25" dataHost="datahost2" database="test-db5" />
<dataNode name="dn26" dataHost