schema.xml里面管理着MyCat的逻辑库、表,每张表使用的分片规则、分布在哪个DataNode以及DataSource上。 之前的例子:
<mycat:schema xmlns:mycat="http://org.opencloudb/">
<schema name="schema1" checkSQLschema="false" sqlMaxLimit="10000" dataNode="test4">
<table name="orders" primaryKey="id" dataNode="test$1-3" rule="mod-long-orders">
<childTable name="orders_cargo" joinKey="order_id" parentKey="id">
childTable>
<childTable name="customer_order_rel" joinKey="order_id" parentKey="id">
childTable>
<childTable name="courier_order_rel" joinKey="order_id" parentKey="id">
childTable>
table>
<table name="order_status_interception" primaryKey="id" type="global" dataNode="test$1-3">
table>
<table name="courier" primaryKey="id" dataNode="test4">
table>
<table name="customer" primaryKey="id" dataNode="test$5-6" rule="mod-long-customer">
table>
schema>
<dataNode name="test1" dataHost="test" database="db1" />
<dataNode name="test2" dataHost="test" database="db2" />
<dataNode name="test3" dataHost="test" database="db3" />
<dataNode name="test4" dataHost="test" database="db4" />
<dataNode name="test5" dataHost="test" database="db5" />
<dataNode name="test6" dataHost="test" database="db6" />
<dataHost name="test" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
<heartbeat>select 1 from dualheartbeat>
<writeHost host="test" url="10.202.4.181:3306" user="test" password="test">
<readHost host="slave" url="10.202.4.181:3307" user="root" password="sf123456"/>
writeHost>
dataHost>
mycat:schema>
逻辑库配置schema标签:
<schema name="schema1" checkSQLschema="false" sqlMaxLimit="10000" dataNode="test4">
schema>
其中,这里配置的dataNode属性,是指这个逻辑库中逻辑表的默认分片节点是test4,如果逻辑表自己配置了分片节点,那么这个属性对那个逻辑表无效。 sqlMaxLimit防止过多的输出,如果sql语句中显式的指定了limit大小,那么这个属性就不会生效。而且,如果对于非分片表执行sql语句,这个属性也不会生效。
逻辑表配置table标签:
<table name="orders" primaryKey="id" dataNode="test$1-3" rule="mod-long-orders">
<childTable name="orders_cargo" joinKey="order_id" parentKey="id">
childTable>
<childTable name="customer_order_rel" joinKey="order_id" parentKey="id">
childTable>
<childTable name="courier_order_rel" joinKey="order_id" parentKey="id">
childTable>
table>
<table name="order_status_interception" primaryKey="id" type="global" dataNode="test$1-3">
table>
<table name="courier" primaryKey="id" dataNode="test4">
table>
<table name="customer" primaryKey="id" dataNode="test$5-6" rule="mod-long-customer">
table>
分片表子表配置 childTable标签:
<table name="orders" primaryKey="id" dataNode="test$1-3" rule="mod-long-orders">
<childTable name="orders_cargo" joinKey="order_id" parentKey="id">
childTable>
<childTable name="customer_order_rel" joinKey="order_id" parentKey="id">
childTable>
<childTable name="courier_order_rel" joinKey="order_id" parentKey="id">
childTable>
table>
分片节点dataNode标签配置:
<dataNode name="test1" dataHost="test" database="db1" />
<dataNode name="test2" dataHost="test" database="db2" />
<dataNode name="test3" dataHost="test" database="db3" />
<dataNode name="test4" dataHost="test" database="db4" />
<dataNode name="test5" dataHost="test" database="db5" />
<dataNode name="test6" dataHost="test" database="db6" />
分片主机dataHost标签配置:
<dataHost name="test" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
<heartbeat>select 1 from dualheartbeat>
<writeHost host="test" url="10.202.4.181:3306" user="test" password="test">
<readHost host="slave" url="10.202.4.181:3307" user="root" password="sf123456"/>
writeHost>
dataHost>
dataHost标签:该标签在mycat逻辑库中也是作为最底层的标签存在,直接定义了具体的数据库实例、读写分离配置和心跳语句。
以上,MyCat基本配置已经配置好。下面则启动,进入mycat的bin目录,启动MyCat: ./mycat start 查看启动状态: ./mycat status 停止: ./mycat stop 重启(改变上面的xml配置不用重启,管理端可以重新载入,以后会讲): ./mycat restart 查看logs/下的wrapper.log和mycat.log可以查看运行时问题和异常。 访问MyCat(这里为127.0.0.1:8066),可以看到: