一. schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        <!-- 定义一个MyCat的模式,逻辑数据库名称TestDB -->
        <!-- “checkSQLschema”:描述的是当前的连接是否需要检测数据库的模式 -->
        <!-- “sqlMaxLimit”:表示返回的最大的数据量的行数 -->
        <!-- “dataNode="dn1"”:该操作使用的数据节点是dn1的逻辑名称 -->
        <schema name="mycat" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"/>
        <!-- 定义数据的操作节点 -->
        <!-- “dataHost="localhost1"”:定义数据节点的逻辑名称 -->
        <!-- “database="mldn"”:定义数据节点要使用的数据库名称 -->
        <dataNode name="dn1" dataHost="localhost1" database="mldn" />
        <!-- 定义数据节点,包括了各种逻辑项的配置 -->
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
            <!-- 配置真实MySQL与MyCat的心跳 -->
            <heartbeat>select user()</heartbeat>
            <!-- 配置真实的MySQL的连接路径 -->
            <writeHost host="hostM1" url="192.168.1.128:3306" user="root" password="123456"></writeHost>
        </dataHost>
</mycat:schema>


二.  dataHost标签上属性释义


balance:负载均衡类型

0:不开启读写分离机制,所有读操作都发送到当前可用的writeHost上

1:全部的readHost与stand by writeHost参与select语句的负载均衡,

2:所有读操作都随机在writeHost、readHost上分发

3:所有读请求随机分发到writeHost对应的readHost执行,writeHost不负担读压力


writeType:负载均衡类型

0:所有写操作发送到配置的第一个writeHost,当第一个writeHost宕机时,切换到第二个writeHost,重新启动后以切换后的为准,切换记录在配置文件:dnindex.properties中

1:所有写操作都随发送到配置的writeHost

2:尚未实现


switchType:切换方式

-1:不自动切换

1:自动切换(默认)

2:基于MySql主从同步的状态来决定是否切换


三. server.xml

添加如下配置:相当于建立了一个叫做mycat用户,对应密码为mycat,该用户管理了mycats这个逻辑库。当然了,也可以为用户添加管理多个逻辑库,以,(英文逗号)分隔开即可

    <user name="mycat">
        <property name="password">mycat</property>
        <property name="schemas">mycats</property><!--schemas:逻辑库名称,具体配置在scheme.xml中-->
    </user>


四. schema.xml

  可以说是最重要的配置文件,管理着 MyCat 的逻辑库、表、分片规则、DataNode 以及 DataSource

schema是实际逻辑库的配置,多个schema代表多个逻辑库

dataNode是逻辑库对应的分片,如果配置多个分片则需要添加多个dataNode即可

dataHost是实际的物理库配置,可以根据业务需要配置多主、主从等其他配置,多个dataHost代表分片对应的物理库地址,下面的writeHost、readHost代表该分片是否配置多写,主从,读写分离等高级特性

添加如下配置:水平切分,数据按Id取模均匀划分到两个数据库中

    <schema name="mycats" checkSQLschema="false" sqlMaxLimit="100">
        <!-- 逻辑表配置 -->
        <table name="tb_user" dataNode="dn1,dn2" rule="mod-long" /><!--name:实际物理库的数据表名;dataNode:表对应的分片;rule:分片规则名称,具体配置在rule.xml中-->
    </schema>
    <dataNode name="dn1" dataHost="host1" database="mycat1" /><!--name:分片名称;database:实际物理库的数据库名-->
    <dataNode name="dn2" dataHost="host1" database="mycat2" />
    <dataHost name="host1" maxCon="100" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">
       <heartbeat>select user()</heartbeat><!--mysql心跳检测命令-->
       <writeHost host="hostM1" url="localhost:3306" user="root" password="xxx" /><!--实际物理库的配置信息-->
    </dataHost>


五. rule.xml

  定义了表拆分所涉及到的规则定义。根据业务可以灵活的对表使用不同的分片算法(目前已实现十余种不同的分片规则,对应所在源码包为:io.mycat.route.function),或者对表使用相同的算法但具体的参数不同。

添加如下配置:水平切分,数据按Id取模均匀划分到两个数据库中

    <tableRule name="mod-long"> 
    <!-- 对应表的分片规则 -->
        <rule>
            <columns>id</columns><!-- 对应数据表要取模的字段名称 -->
            <algorithm>mod-long</algorithm><!-- 对应function的名称 -->
        </rule>
    </tableRule>
    
    <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
    <!-- name:对应tableRule的名称;class:切分规则对应的切分类 -->
        <!--  scheme.xml中有多少个dataNode就改成多少个 -->
        <property name="count">2</property>
    </function>


六. server.xml

server.xml中的内容,简要来说,主要有<system>、<user>和<firewall>这三部分。

<system> SystemConfig      DBLE服务器配置,例如服务端口、管理端口等

<user>         UserConfig      访问DBLE的用户配置,例如用户名、密码、允许访问哪些库or表等

<firewall> FirewallConfig      访问权限配置,例如基于用户的机器IP来允许/禁止访问


	<user name="root" defaultAccount="true">
		<property name="password">123456</property>
		<property name="schemas">TESTDB</property> # 如果授予多个库访问权限,用逗号隔开即可:
		
		<!-- 表级 DML 权限设置 -->
		<!-- 
		# 默认对imooc_db库有update、select权限,对其中的tb01表无权限,对tb02表四个权限都有)		
		<privileges check="false">
			<schema name="TESTDB" dml="0110" >
				<table name="tb01" dml="0000"></table>  
				# 对用户授予表权限的示例:instsert,update,select,delete
				<table name="tb02" dml="1111"></table> 
			</schema>
		</privileges>		
		 -->
	</user>
	<user name="user">
		<property name="password">user</property>
		<property name="schemas">TESTDB</property>
		<property name="readOnly">true</property>
	</user>


操作

DML权限示例

说明

insert,update,select,delete

0000

禁止增加、更新、查询和删除

insert,update,select,delete

0010

禁止增加、更新和删除,可以查询

insert,update,select,delete

1110

禁止删除,可以创建、更新和查询

如果设置了 schema 的 DML,而没有设置 table 的 DML,则自动继承 schema 的 DML 属性


签名:这个人很懒,什么也没有留下!
最新回复 (0)
返回