本地时间的方式,id自动生成的策略
ID= 64 位二进制 (42(毫秒)+5(机器 ID)+5(业务编码)+12(重复累加)
,这个本地时间戳的方式是mycat默认的,所以大家在配置的时候,确认一下自己server.xml中的sequnceHandlerType
配置是否为2。实现本地时间戳注意点,就是自动生成的id是18位的,所以大家在创建表的时候,需要注意下主键的大小。
创建数据库
#创建数据库
create database mycat;
#添加表
use mycat
#创建表test
create table test5(id varchar(18) primary key,name varchar(32)) ;
#创建数据库
create database mycat3;
#添加表
use mycat2
#创建表test
create table test5(id varchar(18) primary key,name varchar(32)) ;
配置macat
1、配置schema.xml
#编辑schema.xml 的配置文档
vim ./conf/schema.xml
#添加虚拟表配置,这个地方。
<table name="test5" dataNode="jdbc_node1,jdbc_node2" primaryKey="id" autoIncrement="true" type="global"/>
下面是完整配置
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="yellowcong" checkSQLschema="true" sqlMaxLimit="1000">
<table name="test5" dataNode="jdbc_node1,jdbc_node2" primaryKey="id" autoIncrement="true" type="global"/>
</schema>
<dataNode name="jdbc_node1" dataHost="localhost" database="mycat" />
<dataNode name="jdbc_node2" dataHost="localhost" database="mycat2" />
<dataHost name="localhost" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="127.0.0.1:3306" user="root" password="root" />
</dataHost>
</mycat:schema>
配置server.xml
#修改mycat的server.xml
vim ./conf/server.xml
#修改sequnceHandlerType 为2,表示本地时间戳的方式
<property name="sequnceHandlerType">2</property>
下面是完整配置
<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License. - You
may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0
- - Unless required by applicable law or agreed to in writing, software -
distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the
License for the specific language governing permissions and - limitations
under the License. -->
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="serverPort">8066</property>
<property name="useSqlStat">0</property> <!-- 1为开启实时统计、0为关闭 -->
<property name="useGlobleTableCheck">0</property> <!-- 1为开启全加班一致性检测、0为关闭 -->
<property name="sequnceHandlerType">2</property>
<property name="processorBufferPoolType">0</property>
<!--分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志-->
<property name="handleDistributedTransactions">0</property>
<!--
off heap for merge/order/group/limit 1开启 0关闭
-->
<property name="useOffHeapForMerge">1</property>
<!--
单位为m
-->
<property name="memoryPageSize">1m</property>
<!--
单位为k
-->
<property name="spillsFileBufferSize">1k</property>
<property name="useStreamOutput">0</property>
<!--
单位为m
-->
<property name="systemReserveMemorySize">384m</property>
<!--是否采用zookeeper协调切换 -->
<property name="useZKSwitch">true</property>
</system>
<user name="root">
<property name="password">root</property>
<property name="schemas">yellowcong</property>
</user>
<user name="user">
<property name="password">user</property>
<property name="schemas">yellowcong</property>
<property name="readOnly">true</property>
</user>
</mycat:server>
配置sequence_time_conf.properties
下面是配置机器 ID的。默认不修改,即可。
vim ./conf/sequence_time_conf.properties
#sequence depend on TIME
WORKID=01
DATAACENTERID=01
测试插入数据
重启mycat服务器
#连接mycat
mysql -h 127.0.0.1 -P 8066 -u root -proot
#使用yellowocng 数据库
use yellowcong;
#插入数据
insert into test5 (name) values ('doubi'),('yellowcong');
id的生成规则ID= 64 位二进制 (42(毫秒)+5(机器 ID)+5(业务编码)+12(重复累加)
问题集合
Column count doesn’t match value count at row 1
这个问题就是,我尼玛sql写错了,好尴尬啊,好尴尬、
Field ‘id’ doesn’t have a default value
这个问题是说,没有指定一个默认的id,解决办法,就是配置schema.xml,添加autoIncrement="true"
参考文章
http://blog.csdn.net/fighterandknight/article/details/77892927