十二、Mycat-分库分表

  1. 分库修改schema.xml文件

    <?xml version="1.0"?>
    <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
    <mycat:schema xmlns:mycat="http://io.mycat/">
    	<!--   name="TESTDB" 配置逻辑库为 TESTDB
               checkSQLschema="false" 配置检查数据库信息,比如:select * FROM TESTDB.customer; 
            当配置false时,逻辑库名TESTDB不会省去还是:select * FROM TESTDB.customer;。
            当配置true时,逻辑库名TESTDB会省去变成:select * from customer;。
               sqlMaxLimit="100" 配置查询分页,当查询无分页默认拼接此配置分页,有则不添加。
        -->
    	<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode = "dn1">
    		<!-- 第一步:新增table节点,定义表名 customer,数据节点 dn2
                        name="customer" 配置代表逻辑表,此逻辑表必须和物理表一致,若有多个逻辑表就 
                     写多个<table>标签。
        -->
    		<table name="customer" dataNode="dn2" ></table>
    	</schema>
    	<!-- 第二步:新增节点对应的数据库名称,分别是orderdb1 和 orderdb1-->
    	<dataNode name="dn1" dataHost="host1" database="orderdb1" /> 
    	<dataNode name="dn2" dataHost="host2" database="orderdb1" /> 
    	<!-- 第三步:取消读写分离 balance="0" -->
    	<dataHost name="host1" maxCon="1000" minCon="10" balance="0"
    			  writeType="0" dbType="mysql" dbDriver="native" 
    			  switchType="1"  slaveThreshold="100">
    		<heartbeat>select user()</heartbeat>
    		
    		<writeHost host="hostM1" url="192.168.192.129:3306" user="root"
    				   password="123456">
    		</writeHost>
    	</dataHost>
    	<!-- 第四步:新增一个写主机 -->
    	<dataHost name="host2" maxCon="1000" minCon="10" balance="0"
    			  writeType="0" dbType="mysql" dbDriver="native" 
    			  switchType="1"  slaveThreshold="100">
    		<heartbeat>select user()</heartbeat>
    		
    		<writeHost host="hostM2" url="192.168.0.104:3306" user="root"
    				   password="123456">
    		</writeHost>
    	</dataHost>
    </mycat:schema>

     

  2. 重启mycat并连接  此处用navicat直接连接,创建表

  3. 创建完的表

  4. 分表接上面的schema.xml

    <!-- 第五步:新增table节点,定义表名 customer,数据节点 dn2-->
    <table name="myorder" dataNode="dn1,dn2" rule="mod_rule" ></table>

  5. 修改rule文件

    	<!-- 第一步:新建规则,columns 字段名必须和数据库一致 -->
    	<tableRule name="mod_rule">
    		<rule>
    			<columns>customer_id</columns>
    			<algorithm>mod-long</algorithm>
    		</rule>
    	</tableRule>
    	<!-- 第二步:修改count = 改为2 -->
    	<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
    		<!-- how many data nodes -->
    		<property name="count">2</property>
    	</function>

  6. 在另外一台新增的数据库中把myorder表先建起来,再重启

    1. mycat查询

    2. windows数据库查询

    3. linux数据库查询

  7. 子表关联主表接上面的schema.xml文件

    <!-- 第六步:添加子节点-->
    <childTable name="order_detail" primaryKey="id" joinKey="order_id" parentKey="id" />
    </table>

  8. 重启插入order_detail数据查询

  9. 全局表

    <!-- 第七步:添加全局表-->
    <table name="dict" dataNode="dn1,dn2" type="global" ></table>

  10. 查数据两个库都可以查到,下面是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" dataNode = "dn1">
    		<!-- 第一步:新增table节点,定义表名 customer,数据节点 dn2-->
    		<table name="customer" dataNode="dn2" ></table>
    		<!-- 第五步:新增table节点,定义表名 customer,数据节点 dn2-->
    		<table name="myorder" dataNode="dn1,dn2" rule="mod_rule" >
    		<!-- 第六步:添加子节点-->
    		<childTable name="order_detail" primaryKey="id" joinKey="order_id" parentKey="id" />
    		</table>
    		<!-- 第七步:添加全局表-->
    		<table name="dict" dataNode="dn1,dn2" type="global" ></table>
    	</schema>
    	<!-- 第二步:新增节点对应的数据库名称,分别是orderdb1 和 orderdb1-->
    	<dataNode name="dn1" dataHost="host1" database="orderdb1" /> 
    	<dataNode name="dn2" dataHost="host2" database="orderdb1" /> 
    	<!-- 第三步:取消读写分离 balance="0" -->
    	<dataHost name="host1" maxCon="1000" minCon="10" balance="0"
    			  writeType="0" dbType="mysql" dbDriver="native" 
    			  switchType="1"  slaveThreshold="100">
    		<heartbeat>select user()</heartbeat>
    		
    		<writeHost host="hostM1" url="192.168.192.129:3306" user="root"
    				   password="123456">
    		</writeHost>
    	</dataHost>
    	<!-- 第四步:新增一个写主机 -->
    	<dataHost name="host2" maxCon="1000" minCon="10" balance="0"
    			  writeType="0" dbType="mysql" dbDriver="native" 
    			  switchType="1"  slaveThreshold="100">
    		<heartbeat>select user()</heartbeat>
    		
    		<writeHost host="hostM2" url="192.168.0.104:3306" user="root"
    				   password="123456">
    		</writeHost>
    	</dataHost>
    </mycat:schema>

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值