需要的配置如下:
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">
<!-- 逻辑库的配置 -->
<schema name="win_test" checkSQLschema="false" dataNode="dn_test">
<table name="user" primaryKey="ID" dataNode="dn_test_01,dn_test_02,dn_test_03" rule="sharding-by-test">
<!-- <childTable name="course" primaryKey="ID" joinKey="id"
parentKey="id">
</childTable>
-->
</table>
</schema>
<!-- 数据节点配置 -->
<dataNode name="dn_test" dataHost="dh_test" database="trc_test_db" />
<!-- 可以配置主从库 -->
<dataNode name="dn_test_01" dataHost="dh_test1" database="test_01" />
<dataNode name="dn_test_02" dataHost="dh_test1" database="test_02" />
<dataNode name="dn_test_03" dataHost="dh_test1" database="test_03" />
<!-- 集群地址配置,可以在此添加需要加入mycat中的数据库安装的服务器地址 -->
<dataHost name="dh_test" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="-1"
slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="host_test" url="127.0.0.1:3306" user="root"
password="qq123456789">
</writeHost>
</dataHost>
<!-- 主从可以配置读写分离 -->
<dataHost name="dh_test1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="-1"
slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="host_test1" url="127.0.0.1:3306" user="root"
password="qq123456789">
</writeHost>
</dataHost>
</mycat:schema>
schema.xml配置
上面对从数据库进行了从库分片,所以需要对配置分片策略,对应于rule.xml文件
<tableRule name="sharding-by-test">
<rule>
<columns>id</columns>
<algorithm>user</algorithm>
</rule>
</tableRule>
<function name="test"
class="org.opencloudb.route.function.PartitionByMurmurHash">
<property name="seed">0</property><!-- 默认是0 -->
<property name="count">10</property><!-- 要分片的数据库节点数量,必须指定,否则没法分片 -->
<property name="virtualBucketTimes">160</property><!-- 一个实际的数据库节点被映射为这么多虚拟节点,默认是160倍,也就是虚拟节点数是物理节点数的160倍 -->
<!-- <property name="weightMapFile">weightMapFile</property> 节点的权重,没有指定权重的节点默认是1。以properties文件的格式填写,以从0开始到count-1的整数值也就是节点索引为key,以节点权重值为值。所有权重值必须是正整数,否则以1代替 -->
<!-- <property name="bucketMapPath">/etc/mycat/bucketMapPath</property>
用于测试时观察各物理节点与虚拟节点的分布情况,如果指定了这个属性,会把虚拟节点的murmur hash值与物理节点的映射按行输出到这个文件,没有默认值,如果不指定,就不会输出任何东西 -->
</function>
rule.xml配置
本配置只是简单配置了分片,可以根据自身的需求来采用更加灵活的分片策略
需要对mycat进行安全设置,需要对用户进行访问安全控制,修改文件是server.xml
<property name="charset">utf8</property>
<property name="defaultSqlParser">druidparser</property>
<!-- <property name="useCompression">1</property>--> <!--1为开启mysql压缩协议-->
<!-- <property name="processorBufferChunk">40960</property> -->
<!--
<property name="processors">1</property>
<property name="processorExecutor">32</property>
-->
<!--默认是65535 64K 用于sql解析时最大文本长度 -->
<!--<property name="maxStringLiteralLength">65535</property>-->
<!--<property name="sequnceHandlerType">0</property>-->
<!--<property name="backSocketNoDelay">1</property>-->
<!--<property name="frontSocketNoDelay">1</property>-->
<!--<property name="processorExecutor">16</property>-->
<!--
<property name="mutiNodeLimitType">1</property> 0:开启小数量级(默认) ;1:开启亿级数据排序
<property name="mutiNodePatchSize">100</property> 亿级数量排序批量
<property name="processors">32</property> <property name="processorExecutor">32</property>
<property name="serverPort">8066</property> <property name="managerPort">9066</property>
<property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property>
<property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
</system>
<user name="root">
<property name="password">xxxxxx</property>
<property name="schemas">win_test,win_test1</property>
</user>
server.xml配置
一个用户名只能对应一个<user></user>,如果需要兼用一个用户访问多个逻辑库,可以用逗号隔开来控制。
如有同学有更深的理解或者想理解更多,欢迎交流