mycat參數文件配置
1. 配置server.xml文件
(#0 代表文件方式,#1 代表數據庫方式,#2 代表本地時間戳方式)
<property name="sequnceHandlerType">1</property>
2. 數據庫配置
#所有操作都在一個物理數據庫(dn1)上
#創建 MYCAT_SEQUENCE 表
#name sequence 名稱
#current_value 當前 value
#increment 增長步長!
#mycat在數據庫中一次讀取多少個sequence
DROP TABLE IF EXISTS MYCAT_SEQUENCE;
CREATE TABLE MYCAT_SEQUENCE (
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '名稱',
`current_value` int(11) NOT NULL COMMENT '當前值',
`increment` int(11) NOT NULL DEFAULT 1 COMMENT '步長',
PRIMARY KEY (`name`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
#插入一條 sequence
INSERT INTO MYCAT_SEQUENCE(name,current_value,increment) VALUES (‘PERSON’,
100000, 100);
#創建相關 function
#獲取當前 sequence 的值 (返回當前值,增量)
DROP FUNCTION IF EXISTS mycat_seq_currval;
DELIMITER ;;
CREATE DEFINER=`root`@`%` 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 DEFINER=`root`@`%` 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 DEFINER=`root`@`%` 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 ;
3. 修改mycat 相關配置
sequence_db_conf.properties
#sequence stored in datanode
GLOBAL=dn1
COMPANY=dn1
CUSTOMER=dn1
ORDERS=dn1
SYS_USER=dn1
TBL_MEMBER=dn1
配置schema.xml
<schema name="DB1" checkSQLschema="false" sqlMaxLimit="100">
<table name="sys_user" primaryKey="user_id" autoIncrement="true" dataNode="dn$1-2" rule="rule1" splitTableNames ="true"/>
</schema>
<dataNode name="dn$1-2" dataHost="localhost1" database="db$1-2" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="xxxx:8066" user="mycat" password="xxxxxx">
</writeHost>
</dataHost>
4. 重啓mycat
./mycat restart