一切都要从MyCat的配置说起
安装目录
我们首先要关注conf里面的配置文件
而配置文件我们需要了解的是
server.xml : MyCat服务器参数调整和用户授权的配置文件
schema.xml : 逻辑库定义和表以及分片定义的配置文件
rule.xml : 分片规则的配置文件,修改该配置文件需要重启MyCat
从server.xml开始了解配置的内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="nonePasswordLogin">0</property>
<property name="useHandshakeV10">1</property>
<property name="useSqlStat">0</property>
<property name="useGlobleTableCheck">0</property>
<property name="sequnceHandlerType">2</property>
<property name="sequnceHandlerPattern">(?:(\s*next\s+value\s+for\s*MYCATSEQ_(\w+))(,|\)|\s)*)+</property>
<property name="subqueryRelationshipCheck">false</property>
<property name="processorBufferPoolType">0</property>
<property name="handleDistributedTransactions">0</property>
<property name="useOffHeapForMerge">0</property>
<property name="memoryPageSize">64k</property>
<property name="spillsFileBufferSize">1k</property>
<property name="useStreamOutput">0</property>
<property name="systemReserveMemorySize">384m</property>
<property name="useZKSwitch">false</property>
<property name="strictTxIsolation">false</property>
<property name="useZKSwitch">true</property>
</system>
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
</user>
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
</mycat:server>
system标签,该标签内嵌套的property标签都是系统配置的属性。
我们主要关注user标签,该标签用于定义登陆mycat的时候的用户和权限
<user name="user">
<property name="password">user</property>
定义了一个用户为user
,密码为user
。
<property name="schemas">TESTDB1,TESTDB2,TESTDB3</property>
schemas定义的则是逻辑库的名称,如果有多个逻辑库可以用逗号隔开
接着了解schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
<table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />
</schema>
<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost1" database="db2" />
<dataNode name="dn3" dataHost="localhost1" database="db3" />
<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="hostM1" url="localhost:3306" user="root"
password="123456">
<readHost host="hostS2" url="192.168.1.200:3306" user="root" password="xxx" />
</writeHost>
<writeHost host="hostS1" url="localhost:3316" user="root"
password="123456" />
</dataHost>
</mycat:schema>
schema标签
用于定义逻辑库,name属性定义逻辑库的名字,sqlMaxLimit定义限制返回结果集的行数,如果-1表示关闭limit限制。
table标签
定义逻辑表,name定义逻辑表的名字,primaryKey定义逻辑表的主键,dataNode定义了表数据所存储的数据节点,rule定义了逻辑表分片规则,对应的是rule.xml中的
dataNode
定义逻辑表存储的物理数据库,name定义数据节点的名称,唯一,dataHost属性定义分派你所在的物理主机,database定义物理数据库名。
dataHost
定义后端数据库主机信息,name定义了一组数据库服务器的名称,在配置文件中必须唯一,
maxCon定义mycat连接mysql的最大连接数,balance定义mycat读写分离、负载均衡的工作方式,如果为0则是不开启读写分离机制。
dbType代表使用的数据库类型(比如mysql,mongoDB等)
dbDriver代表所使用的数据库驱动
switchType代表写数据库如何进行高可用的切换,如果为1代表当每一个writeHost不可访问的时候都会切换到第二个writeHost写服务器。
最后我们了解下rule.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
<tableRule name="rule1">
<rule>
<columns>id</columns>
<algorithm>func1</algorithm>
</rule>
</tableRule>
<function name="func1" class="io.mycat.route.function.PartitionByLong">
<property name="partitionCount">8</property>
<property name="partitionLength">128</property>
</function>
</mycat:rule>
rule.xml 主要就两个标签
tableRule
定义了配置表的分片规则,name分片规则名字,唯一。columns 定义了分片列,必须是表中存在的列,mycat根据这个列计算却低估当前数据要存放在哪个分片。algorithm指定表的分片算法,这里跟function的name属性。
function
定义配置表的分片算法,name定义了算法的名称,唯一。class属性是指实现分片算法的java类的全名。count代表分片节点数的总和。
专注分享Java技术,跟我一起学习吧