1. 程式人生 > >Mycat之資料庫主鍵自增長(本地時間戳方式)-yellowcong

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)) ;

這裡寫圖片描述

配置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"
這裡寫圖片描述

參考文章