概述mysql
Mycat可以实现数据库读写分离,不能实现主从同步,数据库的备份仍是基于数据库层面的。Mycat只是数据库的中间件;sql
Mycat读写分离配置数据库
在MySQL中间件出现以前,对于MySQL主从集群,若是要实现其读写分离,通常是在程序端实现,这样就带来一个问题,即数据库和程序的耦合度过高,若是我数据库的地址发生改变了,那么我程序端也要进行相应的修改,若是数据库不当心挂掉了,则同时也意味着程序的不可用,而这对不少应用来讲,并不能接受。负载均衡
引入MySQL中间件能很好的对程序端和数据库进行解耦,这样,程序端只需关注数据库中间件的地址,而无需知晓底层数据库是如何提供服务。测试
做为当前煊赫一时的MySQL中间件,MyCAT实现MySQL主从集群的读写分离自是应有之义,其配置也至关简单。url
在这里,我用三个实例组成MySQL主从集群,来验证MyCAT的读写分离功能,其实,一主一从就能够知足,之因此用三个,是为了验证MyCAT的分片功能。spa
集群组成以下:code
角色 主机名 主机IPserver
master mysql-server1 192.168.244.145xml
slave mysql-server2 192.168.244.146
slave mysql-server3 192.168.244.144
在这里,仍是使用Travelrecord表进行测试。
首先编辑MyCAT的配置文件schema.xml,关于dataHost的配置信息以下:
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="hostM1" url="localhost:3306" user="root" password="123456"> </writeHost> <writeHost host="hostS1" url="192.168.244.146:3306" user="root" password="123456" /> <writeHost host="hostS2" url="192.168.244.144:3306" user="root" password="123456" /> </dataHost>
这里面,有两个参数须要注意,balance和 switchType。
其中,balance指的负载均衡类型,目前的取值有4种:
1. balance="0", 不开启读写分离机制,全部读操做都发送到当前可用的writeHost上。
2. balance="1",所有的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,而且M1与 M2互为主备),正常状况下,M2,S1,S2都参与select语句的负载均衡。
3. balance="2",全部读操做都随机的在writeHost、readhost上分发。
4. balance="3",全部读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力
switchType指的是切换的模式,目前的取值也有4种:
1. switchType='-1' 表示不自动切换
2. switchType='1' 默认值,表示自动切换
3. switchType='2' 基于MySQL主从同步的状态决定是否切换,心跳语句为 show slave status
4. switchType='3'基于MySQL galary cluster的切换机制(适合集群)(1.4.1),心跳语句为 show status like 'wsrep%'。