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:是每次增长多少
注意:
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
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 name="balance_report" dataNode="dn_svc$1-10" primaryKey="id" rule="mod-accountID-long" splitTableNames ="true" autoIncrement="true">
</table>
</schema>
<!-- 生成 sequence 的节点 -->
<dataNode name="dn_svc" dataHost="host_svc" database="svc"/>
<!-- 生成sequnce -->
<dataHost name="host_svc" balance="0" dbDriver="native" dbType="mysql" maxCon="1000" minCon="10" slaveThreshold="100" switchType="1" writeType="0">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<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_id</columns>
<algorithm>rang-long</algorithm>
</rule>
</tableRule>
<function name="rang-long" class="io.mycat.route.function.AutoPartitionByLong">
<property name="mapFile">autopartition-long.txt</property>
</function>
autopartition-long.txt
# range start-end ,data node index
# K=1000,M=10000.
0-1000M=0
10000001-2000M=1
20000001-3000M=2
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/100389.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...