2019独角兽企业重金招聘Python工程师标准>>>
本次实验 MyCat Scheme.xml 文件如下
本次实验将 MyCat 全局序列号配置在 dn3 节点上面
修改 server.xml配置:
注:sequnceHandlerType 需要配置为1,表示使用数据库方式生成sequence.
修改 sequence_db_conf.properties 配置:
配置文件中 GLOBAL=dn3 (GLOBAL 为全局序列的名称,dn3 表示节点)
执行以下 SQL 创建全局 sequence 需要的表,并初始化数据(在 dn3 节点上)
drop table if exists mycat_sequence;
create table mycat_sequence(name varchar(50) not null,current_value int not null,increment int not null default 100, primary key(name)) engine=innodb;
insert into mycat_sequence(name, current_value, increment) values (' GLOBAL', 100000, 100); -- 注意这里的 GLOBAL 要大写,对应上 sequence_db_conf.properties 的配置
创建以下函数 (在 dn3 节点上)
-- 获取当前sequence的值 (返回当前值,增量)
DROP FUNCTION IF EXISTS MYCAT_SEQ_CURRVAL;
DELIMITER $$
CREATE FUNCTION mycat_seq_currval(SEQ_NAME VARCHAR(50)) RETURNS VARCHAR(64) CHARSET utf8
DETERMINISTIC
BEGIN
DECLARE RETVAL VARCHAR(64);
SET RETVAL = "-999999999,NULL";
SELECT CONCAT(CAST(CURRENT_VALUE AS CHAR), ",", CAST(INCREMENT AS CHAR)) INTO RETVAL FROM MYCAT_SEQUENCE WHERE NAME = SEQ_NAME;
RETURN RETVAL;
END$$
DELIMITER ;
-- 设置sequence值
DROP FUNCTION IF EXISTS MYCAT_SEQ_SETVAL;
DELIMITER $$
CREATE FUNCTION mycat_seq_setval(SEQ_NAME VARCHAR(50),VALUE INTEGER) RETURNS VARCHAR(64) CHARSET UTF8
DETERMINISTIC
BEGIN
UPDATE MYCAT_SEQUENCE
SET CURRENT_VALUE = VALUE
WHERE NAME = SEQ_NAME;
RETURN MYCAT_SEQ_CURRVAL(SEQ_NAME);
END$$
DELIMITER ;
-- 获取下一个sequence值
DROP FUNCTION IF EXISTS MYCAT_SEQ_NEXTVAL;
DELIMITER $$
CREATE FUNCTION mycat_seq_nextval(SEQ_NAME VARCHAR(50)) RETURNS VARCHAR(64) CHARSET UTF8
DETERMINISTIC
BEGIN
UPDATE MYCAT_SEQUENCE
SET CURRENT_VALUE = CURRENT_VALUE + INCREMENT WHERE NAME = SEQ_NAME;
RETURN MYCAT_SEQ_CURRVAL(SEQ_NAME);
END$$
DELIMITER ;
测试 sequence
-- 测试 sequence
insert into t_person(id, name) values(next value for MYCATSEQ_GLOBAL, 'test');
更详细的内容请参考 MyCat 权威指南