在搭配mycat实现范围约定进行分片的时候,配置文件如下
schema.xml
<table name="payment_info" dataNode="dn1,dn2" rule="auto_sharding_long" ></table>
rule.xml
<tableRule name="auto_sharding_long">
<rule>
<columns>order_id</columns>
<algorithm>rang-long</algorithm>
</rule>
</tableRule>
…
<function name="rang-long"
class="io.mycat.route.function.AutoPartitionByLong">
<property name="mapFile">autopartition-long.txt</property>
<property name="defaultNode">0</property>
</function>
autopartition-long.txt
0-102=0
103-200=1
但是配置完成之后,重新启动mycat发现了一个问题
jvm 1 | WrapperSimpleApp: Encountered an error running main: java.lang.ExceptionInInitializerError
jvm 1 | java.lang.ExceptionInInitializerError
jvm 1 | at io.mycat.MycatStartup.main(MycatStartup.java:53)
jvm 1 | at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
jvm 1 | at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
jvm 1 | at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
jvm 1 | at java.lang.reflect.Method.invoke(Method.java:498)
jvm 1 | at org.tanukisoftware.wrapper.WrapperSimpleApp.run(WrapperSimpleApp.java:240)
jvm 1 | at java.lang.Thread.run(Thread.java:748)
jvm 1 | Caused by: io.mycat.config.util.ConfigException: Illegal table conf : table [ PAYMENT_INFO ] rule function [ rang-long ] partition size : 3 > table datanode size : 2, please make sure table datanode size = function partition size
jvm 1 | at io.mycat.config.loader.xml.XMLSchemaLoader.checkRuleSuitTable(XMLSchemaLoader.java:569)
jvm 1 | at io.mycat.config.loader.xml.XMLSchemaLoader.loadTables(XMLSchemaLoader.java:396)
jvm 1 | at io.mycat.config.loader.xml.XMLSchemaLoader.loadSchemas(XMLSchemaLoader.java:168)
jvm 1 | at io.mycat.config.loader.xml.XMLSchemaLoader.load(XMLSchemaLoader.java:117)
jvm 1 | at io.mycat.config.loader.xml.XMLSchemaLoader.<init>(XMLSchemaLoader.java:78)
jvm 1 | at io.mycat.config.loader.xml.XMLSchemaLoader.<init>(XMLSchemaLoader.java:82)
jvm 1 | at io.mycat.config.ConfigInitializer.<init>(ConfigInitializer.java:76)
jvm 1 | at io.mycat.config.MycatConfig.<init>(MycatConfig.java:72)
jvm 1 | at io.mycat.MycatServer.<init>(MycatServer.java:166)
jvm 1 | at io.mycat.MycatServer.<clinit>(MycatServer.java:109)
jvm 1 | ... 7 more
wrapper | <-- Wrapper Stopped
其中最为重点的错误为
Illegal table conf : table [ PAYMENT_INFO ] rule function [ rang-long ] partition size : 3 > table datanode size : 2, please make sure table datanode size = function partition size
可以看到的是我们所指定的数据库节点和配置文件里面的节点不一致,一个为3一个为2
但是我的配置文件里面的确只配置了两个节点,一个dn1、一个dn2。
而后我配置文件一个一个检查过去,在autopartition-long.txt发现了问题
autopartition-long.txt的文件如下
红框的地方是mycat自带默认配置的,它里面自动帮我们配置了三个节点的数据。所以会报错,此时把这三行注释掉
保存文件重新启动mycat
成功启动