修改之前备份schema.xml
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>