Mycat教程
Mycat读写分离
Mycat分库分表
Mycat全局序列号

Mycat配置文件schema.xml

修改之前备份schema.xml

配置schema

1、作用

schema用于配置逻辑库。

2、 配置说明

只做读写分离,不做分库分表,Mycat只是帮我们转发一下请求,读转发到从库,写转发到主库,则schema标签里面不用配置table。

给schema标签加上属性dataNode,配置dataNode的名字(name)。

3、最终配置如下

<schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"/>

配置dataNode

1、 作用

dataNode定义了Mycat中的数据节点,也就是我们通常说所的数据分片,一个dataNode标签就是一个独立的数据分片,通俗理解,一个分片就是一个物理数据库

2、 配置说明

● name

定义数据节点的名字,这个名字需要是唯一的,这个名字在schema里面会使用到;

● dataHost

用于定义该分片属于哪个数据库实例的,属性值是引用dataHost标签上定义的name属性。

● database

用于对应真实的数据库名,必须是真实存在的;

3、最终配置如下

<dataNode name="dn1" dataHost="localhost1" database="test" />

配置dataHost

1、作用

定义具体的数据库实例、读写分离配置和心跳语句;

2、配置说明

● balance属性

负载均衡类型,目前的取值有4种:

①balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上;

②balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。

③balance="2",所有读操作都随机的在writeHost、readhost上分发。

④balance="3",所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力。

推荐balance设置为1

● writeType

已过时,1.6版本就不用了。

● switchType属性

用于指定主服务器发生故障后的切换类型。

-1 表示不自动切换

①默认值,自动切换(推荐)

②基于MySQL主从同步的状态决定是否切换

③基于MySQL galary cluster的切换机制(适合集群)(1.4.1)

通常情况下,我们MySQL采用双主双从的模式下,switchType为1即可。因为双主从模式下,主从同步关系很复杂,不能根据MySQL的状态来切换。只需要在一个主出问题后,切换到另外的主。

● heartbeat标签

用于和后端数据库进行心跳检查的语句,检测MySQL数据库是否正常运行。

当switchType为1时,mysql心跳检查语句是select user()。

当switchType为2时,mysql心跳检查语句是show slave status。

当switchType为3时,mysql心跳检查语句是show status like 'wsrep%'。

● writeHost与readHost标签

这两个标签都指定后端数据库的相关配置给mycat,用于实例化后端连接池。唯一不同的是,writeHost指定写实例、readHost指定读实例,组合这些读写实例来满足系统的要求。

在一个dataHost内可以定义多个writeHost和readHost。但是,如果writeHost指定的后端数据库宕机,那么这个writeHost绑定的所有readHost都将不可用。另一方面,由于这个writeHost宕机系统会自动的检测到,并切换到备用的writeHost上去。

3、推荐配置

switchType设置为1,表示自动切换主从。

heartbeat语句为 select user()。

balance一般设置为1即可。

一主两从配置示例:

双主双从配置示例:

完整配置信息(双主双从)

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--只做读写分离,不做分库分表,Mycat只是帮我们转发一下请求,读转发到从库,写转发到主库,则schema标签里面不用配置table-->
<schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"/>
<!--配置真实存在的物理数据库-->
<dataNode name="dn1" dataHost="localhost1" database="test" />

<dataHost name="localhost1"
          maxCon="1000"
          minCon="10"
          balance="1"
          writeType="0"
          dbType="mysql"
          dbDriver="native"
          switchType="1"
          slaveThreshold="100">
    <heartbeat>select user()</heartbeat>
    <writeHost host="hostM3307" url="localhost:3307" user="root" password="123456">
        <readHost host="hostS3308" url="localhost:3308" user="root" password="123456" />
        <readHost host="hostS3309" url="localhost:3309" user="root" password="123456" />
    </writeHost>
    <writeHost host="hostM3308" url="localhost:3308" user="root" password="123456">
        <readHost host="hostS3307" url="localhost:3307" user="root" password="123456" />
        <readHost host="hostS3310" url="localhost:3310" user="root" password="123456" />
    </writeHost>
</dataHost>
</mycat:schema>