-
分库修改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>
-
重启mycat并连接 此处用navicat直接连接,创建表
-
创建完的表
-
分表接上面的schema.xml
<!-- 第五步:新增table节点,定义表名 customer,数据节点 dn2--> <table name="myorder" dataNode="dn1,dn2" rule="mod_rule" ></table>
嗯
-
修改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>
嗯
-
在另外一台新增的数据库中把myorder表先建起来,再重启
-
mycat查询
-
windows数据库查询
-
linux数据库查询
-
-
子表关联主表接上面的schema.xml文件
<!-- 第六步:添加子节点--> <childTable name="order_detail" primaryKey="id" joinKey="order_id" parentKey="id" /> </table>
嗯
-
重启插入order_detail数据查询
-
全局表
<!-- 第七步:添加全局表--> <table name="dict" dataNode="dn1,dn2" type="global" ></table>
嗯
-
查数据两个库都可以查到,下面是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>