因为最近在做mycat 分库分表,然后遇到了一个小小的坑。在这里分享一下!
全局序列号,官方文档介绍是有以下几种:
本地文件方式
数据库方式
本地时间戳方式
详情请参考下面这个博客,个人认为讲的还是比较靠谱的s
在这里主要讲下本地时间戳的方式
本地时间戳
ID= 64 位二进制(42(毫秒)+5(机器 ID)+5(业务编码)+12(重复累加)
换算成十进制为18位的long类型,每毫秒可以并发12为二进制的累加。
使用方式:
a. 配置 server.xml
<property name="sequnceHandlerType">2</property>
b. 在 mycat 下配置:sequence_time_conf.properties
WORKID=0-31 #任意整数
DATAACENTERID=0-31 #任意整数
多个 mycat 节点下每个 mycat 配置的WORKID,DATAACENTERID 不同,组成唯一标识,总共支持
32*32=1024 种组合。
ID 示例:56763083475511
注意注意
还需要修改下 mycat/conf/schema.xml
开启一个配置
图中画框框的地方
autoIncrement=“true”
autoIncrement
使用 autoIncrement="true" 指定返个表有使用自增长主键,这样 mycat 才会不抛出分片键找不到的异常。
使用 autoIncrement="false" 来禁用返个功能,当然你也可以直接删除掉这个属性。默认就是禁用的
当如果禁用时,插入一条sql语句则必须对如下图所示
必须得给Id加上
new value for MYCATSEQ_GLOBAL
否则的话 会直接使用mysql 所配置的自增主键,这样就会导致多个库的主键重复