mycat全局序列号(主键)及分片配置

1.建全局sequence表

CREATE TABLE `MYCAT_SEQUENCE` (
  `NAME` varchar(50) COLLATE utf8mb4_bin NOT NULL,
  `current_value` int(11) NOT NULL,
  `increment` int(11) NOT NULL DEFAULT '100',
  PRIMARY KEY (`NAME`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

2.插入数据
insert 本用的表名 BALANCE_REPORT
name:要使用全局主键的表名
current_value:是初始值
increment:是每次增长多少
mycat全局序列号(主键)及分片配置_第1张图片

注意:
1.表名大小问题:mycat默认全是大写
2.increment可能一次增涨多个(比如100个)应用拿到之后自行逐1增长,用完之后再来取,减少mysql数据库压力。如果没用完应用重起了,剩下的丢弃,重新从mysql取,避免主键错乱。

3.修改配置文件

vim /etc/mycat/sequence_db_conf.properties

填写对应表名 BALANCE_REPORT=dn_svc
其中 dn_svc就是后面在schema.xml中配置的datanode
mycat全局序列号(主键)及分片配置_第2张图片

4.配置schema.xml

vim /etc/mycat/schema.xml

主要是添加: primaryKey="id" autoIncrement="true"

注意:
autoIncrement针对的是primaryKey,跟分片无关;
分片字段是rule="mod-accountID-long"这里决定的。

schema.xml

<schema name="sc_svc" checkSQLschema="false" sqlMaxLimit="100">
        table>
    schema>


   
    <dataNode name="dn_svc"  dataHost="host_svc" database="svc"/>


    
    <dataHost name="host_svc" balance="0" dbDriver="native" dbType="mysql" maxCon="1000" minCon="10" slaveThreshold="100" switchType="1" writeType="0">
        <heartbeat>select user()heartbeat>
        
        <writeHost host="svchost" url="192.168.88.203:3306" user="root" password="Root@123" />
    dataHost>

5。配置rule.xml
rule.xml

<tableRule name="mod-accountID-long">
        <rule>
            <columns>account_idcolumns>
            <algorithm>rang-longalgorithm>
        rule>
tableRule>

<function name="rang-long"
        class="io.mycat.route.function.AutoPartitionByLong">
        <property name="mapFile">autopartition-long.txtproperty>
function>

autopartition-long.txt

# range start-end ,data node index
# K=1000,M=10000.
0-1000M=0
10000001-2000M=1
20000001-3000M=2

你可能感兴趣的:(mycat,mycat)