Mycat之数据库主键自增长(本地时间戳方式)-yellowcong

本地时间的方式,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)) ;

Mycat之数据库主键自增长(本地时间戳方式)-yellowcong_第1张图片

配置macat

1、配置schema.xml

#编辑schema.xml 的配置文档
vim ./conf/schema.xml

#添加虚拟表配置,这个地方。
 "test5" dataNode="jdbc_node1,jdbc_node2" primaryKey="id" autoIncrement="true" type="global"/>

下面是完整配置



<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">2property>

下面是完整配置




<mycat:server xmlns:mycat="http://io.mycat/">
        <system>
        <property name="serverPort">8066property>
        <property name="useSqlStat">0property>  
        <property name="useGlobleTableCheck">0property>  

                <property name="sequnceHandlerType">2property>

                <property name="processorBufferPoolType">0property>

                
                <property name="handleDistributedTransactions">0property>

                        
                <property name="useOffHeapForMerge">1property>

                
                <property name="memoryPageSize">1mproperty>

                
                <property name="spillsFileBufferSize">1kproperty>

                <property name="useStreamOutput">0property>

                
                <property name="systemReserveMemorySize">384mproperty>


                
                <property name="useZKSwitch">trueproperty>


        system>

        <user name="root">
                <property name="password">rootproperty>
                <property name="schemas">yellowcongproperty>
        user>

        <user name="user">
                <property name="password">userproperty>
                <property name="schemas">yellowcongproperty>
                <property name="readOnly">trueproperty>
        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(重复累加)
Mycat之数据库主键自增长(本地时间戳方式)-yellowcong_第2张图片

问题集合

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

你可能感兴趣的:(数据库中间件)