mycat分布式mysql中间件(mycat单库分表)


mycat分布式mysql中间件(mycat单库分表)


mycat 分表原理,是在原有分片的基础上把原来分片的路由改写为改写sql:

     例如对于取模,分为3个片的配置:


      分库模式下是:insert into table(xxx)values(1,name);

       router:{

           node1:insert into table(xxx)values(1,name) ,datanode1,

           node2:insert into table(xxx)values(2,name) ,datanode2,

           node3:insert into table(xxx)values(3,name) ,datanode3,

       },

        

        分表模式是: insert into table(xxx)values(1,name);


       router:{

           node1insert into table1(xxx)values(1,name) ,datanode1,

           node1insert into table2(xxx)values(2,name) ,datanode1,

           node1insert into table3(xxx)values(3,name) ,datanode1,

       },



目前官网给的1.6分表存在bug,启动回报datanode 3 > 1 类似的这种提示,需要替换class修复,开发版本1.6。5已经修复,1.6release修复方式为:


由于1.6已经是release,现有的1.6分支当作1.6.5开发,导致无法修改,因此使用分表只能用替换class或者jar的方式:


替换class(可以用于生产基于1.6release):classes\io\mycat\route\function, 附件:http://songwie.com/attached/mycat/AbstractPartitionAlgorithm.class

  

替换jar:lib目录下mycat-server:(基于1.6.5开发板http://songwie.com/attached/mycat/Mycat-server-1.6.5-DEV.jar


----------------------------------------------------------


配置为:

scheml:


<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"> 
 <table name="travelrecord" subTables="travelrecord$1-3" dataNode="dn1" rule="mod-long" /> 
</schema> 
<dataNode name="dn1" dataHost="localhost1" database="mycat" /> 
<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="hostS1" url="localhost:3306" user="root" password="123456" /> 
</dataHost>


rule配置:


<tableRule name="mod-long"> <rule> <columns>id</columns> 
 <algorithm>mod-long</algorithm> </rule> </tableRule> 
 <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
             <property name="count">3</property>
       </function>



注意:目前只做到单库分表,多库分表还不支持,可能会在1.6.5支持,

分表模式下只能配置一个dataNode,同时添加

subTables="travelrecord$1-3"