目录
schema.xmL作为 Mycal中最重要的配置文件之一,涵盖了 Mycat的逻辑库、逻辑表、分片规则、分片节点及数据源的配置。
主要包含一下三组标签
schema标签 配置逻辑表的信息
- name:定义逻辑表表名,在该逻辑库下唯一
- datanode:定义逻辑表所属的 datanode,该属性需要与 datanode标签中name对应;多个 datanode逗号分隔
- rule:分片规则的名字,分片规则名字是在rue.xml中定义的
- primarykey:逻辑表对应真实表的主键
- type:逻辑表的类型,目前逻辑表只有全局表和普通表,如果未配置,就是普通表;全局表,配置为 global
datanode标签 配置节点相关信息
- name:唯一标识,供上层标签使用
- maxon/ min Con:最大连接数/最小连接数
- balance:负载均衡策略,取值0,1,23
- writeτype:写操作分发方式(0:写操作转发到第一个 writehost,第一个挂了,切换到第二个;1:写操作随机分发到配置的 writehost
- dbDrⅳver:数据库驱动,支持 native、jdbc
datahost标签 配置节点具体映射数据源的信息
schema核心属性
- name:指定自定义的逻辑库库名
- checksqlschema:在SQL语句操作时指定了数据库名称,执行时是否自动去除;true:自动去除, false:不自动去除【如果我们有多个schema或者一个schema 我们不指定逻辑库 直接通过命令去查表 那么会报错 例如:select*from TB_ORDER; 正确命令:select*from DB01.TB_ORDER;此时我们就需要在真正执行时让Mycat去掉DB01.否则也会报错】
- sqlmaxlimit:如果未指定 Limit进行查询,最多能查询出多少数据

例如:
- "1.0"?>
- mycat:schema SYSTEM "schema.dtd">
- <mycat:schema xmlns:mycat="http://io.mycat/">
- <schema name="DB01" checkSQLschema="true" sqlMaxLimit="100">
- <table name="TB_ORDER" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
- schema>
- <dataNode name="dn1" dataHost="dhost1" database="db01" />
- <dataNode name="dn2" dataHost="dhost2" database="db01" />
- <dataNode name="dn3" dataHost="dhost3" database="db01" />
- <dataHost name="dhost1" maxCon="1000" minCon="10" balance="0"
- writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
-
- <heartbeat>select user()heartbeat>
- <writeHost host="master" url="jdbc:mysql://192.168.95.xxx:3306?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8" user="root"
- password="1234">
- writeHost>
- dataHost>
-
- <dataHost name="dhost2" maxCon="1000" minCon="10" balance="0"
- writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
- <heartbeat>select user()heartbeat>
-
- <writeHost host="master" url="jdbc:mysql://192.168.96.xxx:3306?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8" user="root"
- password="1234">
- writeHost>
- dataHost>
-
-
- <dataHost name="dhost3" maxCon="1000" minCon="10" balance="0"
- writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
- <heartbeat>select user()heartbeat>
-
- <writeHost host="master" url="jdbc:mysql://192.168.97.xxx:3306?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8" user="root"
- password="1234">
- writeHost>
- dataHost>
-
- mycat:schema>
server.xml主要是配置我们连接时的权限过滤设置,例如我们可以在这里设置读写权限,用户登录验证,访问数据库的权限等等


- "1.0" encoding="UTF-8"?>
- mycat:server SYSTEM "server.dtd">
- <mycat:server xmlns:mycat="http://io.mycat/">
- <system>
- <property name="nonePasswordLogin">0property>
- <property name="useHandshakeV10">1property>
- <property name="useSqlStat">0property>
- <property name="useGlobleTableCheck">0property>
- <property name="sqlExecuteTimeout">300property>
- <property name="sequnceHandlerType">2property>
-
-
- <property name="sequnceHandlerPattern">(?:(\s*next\s+value\s+for\s*MYCATSEQ_(\w+))(,|\)|\s)*)+property>
- <property name="subqueryRelationshipCheck">falseproperty>
-
-
-
-
-
- <property name="processorBufferPoolType">0property>
-
-
-
-
-
-
-
-
- <property name="handleDistributedTransactions">0property>
-
-
- <property name="useOffHeapForMerge">0property>
-
-
- <property name="memoryPageSize">64kproperty>
-
-
- <property name="spillsFileBufferSize">1kproperty>
-
- <property name="useStreamOutput">0property>
-
-
- <property name="systemReserveMemorySize">384mproperty>
-
-
-
- <property name="useZKSwitch">falseproperty>
-
-
-
-
-
-
-
- <property name="strictTxIsolation">falseproperty>
-
- <property name="useZKSwitch">trueproperty>
-
- system>
-
-
-
-
-
-
-
-
-
-
- <user name="root" defaultAccount="true">
- <property name="password">123456property>
- <property name="schemas">DB01property>
-
-
-
- user>
-
- <user name="user">
- <property name="password">123456property>
- <property name="schemas">DB01property>
- <property name="readOnly">trueproperty>
- user>
-
- mycat:server>
这个文件主要是设置我们的分片规则的,分片规则决定了逻辑表中的数据以何种方式落到不同的数据库中 规则需要在schema.xml中进行配置,需要对照着rule.xml中的规则方式进行设置。并且这些规则引用了外部具体的文件,作为规则的具体配置。以默认规则举例。
- <tableRule name="auto-sharding-long">
- <rule>
- <columns>idcolumns>
- <algorithm>rang-longalgorithm>
- rule>
- tableRule>


创建实际库与Mycat逻辑库的数据库与表结构
- 运行Mycat可以看到这些逻辑表都已经存在了【如果使用NaviCat查看的话是看不到的】我们需要将实际的数据表进行创建
在Mycat中执行创建库与表的操作后,对应节点主机上也会相应的创建出一模一样的数据库。
此时 我们就可以根据我们不同的业务需求,通过逻辑库操作具体的数据库节点了。
Mycat也是我们常用的读写分离,分库分表,多租户的解决方案。