mycat全局自增ID
水準分表後,會産生一個問題,就是自增ID問題;
我們以前單表的時候,直接 mysql自增很好搞。單是分表後,就不行了,會有沖突;
是以解決方案可以不用自增,在應用層搞唯一id,比如redis單線程incr 生成自增id;
或者 uuid,基于雪花算法的 UidGenerator等;
我們這裡用mycat提供的支援來生成全局自增ID;
第一步:我們首先在分片的第一節點 建立表和相關函數;
mycat都給我們提供了,在mysql的conf目錄下,dbseq.sql檔案;
我們在第一個分片節點dn2 的db_mall_order資料庫裡導入sql腳本執行即可;
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5yMkJTM5E2MykjMmNmNlljNkZGOwcDO4IDZ0gzNyUWZx8CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
第二步:修改sequence_db_conf.properties檔案
改成 dn2即可;
第三步:修改server.xml配置檔案的 sequnceHandlerType配置;改成1
sequnceHandlerType配置
0 本地方式
1 資料庫方式
2 時間戳方式
第四步:重新開機mycat;
第五步:測試;
DELETE FROM T_ORDER
insert into `T_ORDER`(`id`,`pId`,`num`,`uId`,`orderDate`) values ('next value for MYCATSEQ_GLOBAL',1,1,1,'2020-03-16 22:10:25');
insert into `T_ORDER`(`id`,`pId`,`num`,`uId`,`orderDate`) values ('next value for MYCATSEQ_GLOBAL',1,1,2,'2020-03-16 22:10:25');
insert into `T_ORDER`(`id`,`pId`,`num`,`uId`,`orderDate`) values ('next value for MYCATSEQ_GLOBAL',1,1,2,'2020-03-16 22:10:25');
insert into `T_ORDER`(`id`,`pId`,`num`,`uId`,`orderDate`) values ('next value for MYCATSEQ_GLOBAL',1,1,4,'2020-03-16 22:10:25');
insert into `T_ORDER`(`id`,`pId`,`num`,`uId`,`orderDate`) values ('next value for MYCATSEQ_GLOBAL',1,1,5,'2020-03-16 22:10:25');
insert into `T_ORDER`(`id`,`pId`,`num`,`uId`,`orderDate`) values ('next value for MYCATSEQ_GLOBAL',1,1,5,'2020-03-16 22:10:25');
SELECT * FROM T_ORDER
測試OK;