Mycat配置文件
在Mycat简介中有提到Mycat有三个重要的配置文件schema.xml
、server.xml
、rule.xml
,还有一些其他的依赖配置文件,接下来就分别介绍一下
server.xml配置文件
定义Mycat用户以及系统相关变量,如用户名、密码、端口等
两个重要的标签为user标签和system标签
user标签
主要用于定义登录Mycat的用户和权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| <user name="mycat" defaultAccount="true">
<property name="password">123456</property> <property name="schemas">TESTDB,db1,db2</property> <property name="defaultSchema">TESTDB</property> <property name="readOnly">true</property> <property name="benchmark">1000</property>
<property name="usingDecrypt">1000</property>
</user>
|
system标签
配置的为系统配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
| <system> <property name="charset">utf8</property> <property name="defaultSqlParser">druidparser</property> <property name="nonePasswordLogin">0</property>
<property name="ignoreUnknownCommand">0</property> <property name="useHandshakeV10">1</property> <property name="removeGraveAccent">1</property> <property name="useSqlStat">0</property> <property name="useGlobleTableCheck">0</property> <property name="sqlExecuteTimeout">300</property> <property name="sequnceHandlerType">1</property>
<property name="sequnceHandlerPattern">(?:(\s*next\s+value\s+for\s*MYCATSEQ_(\w+))(,|\)|\s)*)+</property> <property name="subqueryRelationshipCheck">false</property> <property name="sequenceHanlderClass">io.mycat.route.sequence.handler.HttpIncrSequenceHandler</property> <property name="fakeMySQLVersion">5.6.20</property> <property name="processors">1</property> <property name="processorBufferChunk">4096</property> <property name="processorBufferPool">4096000</property> <property name="processorBufferLocalPercent">100</property> <property name="processorExecutor">32</property> <property name="processorBufferPoolType">0</property> <property name="serverPort">8066</property> <property name="managerPort">9066</property> <property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property> <property name="dataNodeIdleCheckPeriod">300000</property> <property name="frontWriteQueueSize">4096</property> <property name="handleDistributedTransactions">0</property>
<property name="useOffHeapForMerge">0</property>
<property name="memoryPageSize">64k</property>
<property name="spillsFileBufferSize">1k</property>
<property name="useStreamOutput">0</property>
<property name="systemReserveMemorySize">384m</property>
<property name="useZKSwitch">false</property>
<property name="strictTxIsolation">false</property> <property name="useZKSwitch">true</property> <property name="parallExecute">0</property> </system>
|
schema.xml配置文件
定义逻辑库,表、分片节点等内容
schema标签
定义逻辑库,可以有多个逻辑库
1 2 3 4 5 6 7 8 9 10 11
|
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1"> <table name="travelrecord,address" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" splitTableNames ="true"/>
</schema>
|
table标签
table标签定义了Mycat中的逻辑表,所有需要拆分的表都需要在table标签中定义
1 2 3 4 5 6 7 8 9 10 11
|
<table name="t_order" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" splitTableNames ="true"/>
|
childTable标签
用来配置ER分片的子表,通过标签上的属性与父表相连
1 2 3 4 5
|
<childTable name-"order_detail" primaryKey="id" joinKey="order_id" parentKey="id">
|
dataNode标签
定义了Mycat中的数据节点,每一个dataNode标签就是一个独立的数据分片
1 2 3 4
|
<dataNode name="dn1" dataHost="host1" database="mybatis" />
|
如果对应的dataNode比较多的话,可以使用
1 2 3
| <dataNode name="multipleDn" dataHost="host1" database="db$0-99" /> <dataNode name="multipleDn2" dataHost="host2" database="db$100-199" />
|
dataHost标签
定义了具体的数据库实例、读写分离以及心跳
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
<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="localhost:3306" user="root" password="123456"> </writeHost> <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/>
<readHost host="hostS1" url="localhost:3307" user="root" password="123456"></readHost> </dataHost>
|
sequence配置文件
Mycat使用sequence配置文件来实现全局的分布式sequence,根据不同的配置方式来使用不同的配置文件
在server.xml中配置的system标签中的sequnceHandlerType 0.本地文件 1.数据库 2.时间戳序列
详细的使用见分布式全局序列
本地文件方式
配置在sequence_conf.properties配置文件中,格式如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
GLOBAL.HISIDS=
GLOBAL.MINID=10001
GLOBAL.MAXID=20000
GLOBAL.CURID=10000
COMPANY.HISIDS= COMPANY.MINID=1001 COMPANY.MAXID=2000 COMPANY.CURID=1000
|
数据库方式
配置在sequence_db_conf.properties配置文件中,格式如下
1 2 3 4 5 6
|
GLOBAL=dn1 COMPANY=dn1 CUSTOMER=dn1 ORDERS=dn1
|
时间戳序列方式
配置在sequence_distributed_conf.properties配置文件中
1 2 3 4
|
WORKID=01 DATAACENTERID=01
|
rule.xml配置文件
定义了拆分表的所有规则,包含了tableRule标签和function标签
tableRule标签
定义规则
1 2 3 4 5 6 7 8 9
| <tableRule name="sharding-by-date"> <rule>
<columns>createTime</columns> <algorithm>partbyday</algorithm> </rule> </tableRule>
|
function标签
定义规则使用的算法
1 2 3 4 5 6 7 8
| <function name="partbyday" class="io.mycat.route.function.PartitionByDate"> <property name="dateFormat">yyyy-MM-dd</property> <property name="sNaturalDay">0</property> <property name="sBeginDate">2014-01-01</property> <property name="sEndDate">2014-01-31</property> <property name="sPartionDay">10</property> </function>
|