Mycat1.6 配置手册

Mycat1.6 有三个核心配置文件:server.xmlschema.xmlrule.xml,均位于 conf/ 目录下。

1. server.xml - 系统配置

1.1 系统参数

<system>
    <property name="defaultSqlParser">druidparser</property>
    <property name="charset">utf8</property>
    <property name="processorBufferChunk">4096</property>
    <property name="processors">32</property>
    <property name="processorExecutor">32</property>
    <property name="sequnceHandlerType">2</property>
    <property name="useGlobleTableCheck">0</property>
    <property name="handleDistributedTransactions">0</property>
    <property name="useOffHeapForMerge">1</property>
    <property name="memoryPageSize">1m</property>
    <property name="spillsFileBufferSize">1K</property>
    <property name="useStreamOutput">0</property>
    <property name="systemReserveMemorySize">384m</property>
</system>
参数默认值说明
defaultSqlParserdruidparserSQL解析器类型
charsetutf8字符集
processorsCPU核心数业务线程数
processorExecutor32辅助线程数
sequnceHandlerType2全局序列类型: 0本地文件、1数据库、2时间戳、3ZK、4雪花
handleDistributedTransactions00不处理、1弱XA、2强XA
useOffHeapForMerge1是否使用堆外内存进行跨分片结果合并

1.2 用户配置

<user name="root">
    <property name="password">123456</property>
    <property name="schemas">TESTDB,db1,db2</property>
    <property name="defaultSchema">TESTDB</property>
    <property name="benchmark">100</property>
</user>

2. schema.xml - 数据库配置

2.1 Schema 节点

<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
    <table name="customer" dataNode="dn1,dn2" rule="sharding-by-intfile" />
    <table name="orders" dataNode="dn1,dn2" rule="mod-long">
        <childTable name="orders_items" primaryKey="id" joinKey="order_id" parentKey="id" />
    </table>
    <table name="hotnews" type="global" dataNode="dn1,dn2" />
</schema>
属性说明
name逻辑库名称
checkSQLschema是否检查SQL中的schema信息
sqlMaxLimitSQL默认limit值
dataNode该Schema默认数据节点

2.2 Table 节点

属性说明
name逻辑表名称
dataNode数据节点(多个逗号分隔)
rule分片规则名称
typeglobal(全局表) 或 省略(分片表)
primaryKey主键
autoIncrement是否自增
needAddLimit是否自动添加limit

2.3 DataNode 节点

<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost1" database="db2" />

2.4 DataHost 节点

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
    writeType="0" dbType="mysql" dbDriver="native" switchType="1">
    <heartbeat>select user()</heartbeat>
    <writeHost host="hostM1" url="192.168.1.100:3306" user="root" password="123456">
        <readHost host="hostS1" url="192.168.1.101:3306" user="root" password="123456" />
    </writeHost>
</dataHost>
属性说明
balance0不开启读写分离、1全部跟随、2所有操作随机分发
writeType0所有写节点都写、1随机一个写节点写
switchType-1不自动切换、1自动切换、2基于MySQL主从同步状态切换
dbDrivernative(原生) 或 jdbc
maxCon最大连接数
minCon最小连接数

3. rule.xml - 分片规则配置

<tableRule name="mod-long">
    <rule>
        <columns>id</columns>
        <algorithm>mod-long</algorithm>
    </rule>
</tableRule>

<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
    <property name="count">3</property>
</function>
属性说明
tableRule.name规则名称,在schema.xml中引用
columns分片键(列名)
algorithm分片函数名称
function.class分片算法实现类
property分片函数参数

4. 全局序列配置

# 方式1: 本地文件 (sequnceHandlerType=0)
# conf/myid.properties
# 使用 conf/sequence_conf.properties 配置各表序列

# 方式2: 数据库方式 (sequnceHandlerType=1)
# 在MySQL创建 MYCAT_SEQUENCE 表
CREATE TABLE MYCAT_SEQUENCE (
    name VARCHAR(50) NOT NULL,
    current_value INT NOT NULL,
    increment INT NOT NULL DEFAULT 1,
    PRIMARY KEY(name)
);

# 方式3: 时间戳方式 (sequnceHandlerType=2)
# 默认使用雪花算法,无需额外配置
提示: 配置文件修改后,可以使用管理端口执行 reload @@config_all; 热加载配置,无需重启Mycat。