1、这里是在mysql主从复制实现的基础上,利用mycat做读写分离,架构图如下:
2、Demo
2.1 在mysql master上创建数据库创建db1
2.2 在数据库db1创建表student
同时,因为配置好了mysql主从复制,在mysql slave上也有一样数据库和表
2.3 编辑 mycat的配置文件server.xml
<!--表示mycat的登录用户名-->
<user name="test">
<!--表示mycat的登录密码-->
<property name="password">test</property>
<!--表示mycat的逻辑数据库名称,可以自定义-->
<property name="schemas">TESTDB</property>
</user> <user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
2.4编辑mycat的配置文件schema.xml
<!--TESTDB表示mycat的逻辑数据库名称
当schema节点没有子节点table的时候,一定要有dataNode属性存在(指向mysql真实数据库),
-->
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<!--指定master的数据库db1-->
<dataNode name="dn1" dataHost="192.168.0.4" database="db1" />
<!--指定mastet的ip -->
<dataHost name="192.168.0.4" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!--表示mysql的心跳状态-->
<heartbeat>select user()</heartbeat>
<!-- master负责写 -->
<writeHost host="hostM1" url="192.168.0.4:3306" user="root"
password="admin">
<!--slave负责读-->
<readHost host="hostS2" url="192.168.0.5:3306" user="root" password="admin" />
</writeHost>
</dataHost>
到这里,利用mycat做读写分离就已经配置完了
注意 dataHost节点的下面三个属性
balance, switchType, writeType
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″,所有读请求随机的分发到writeHost下的readhost执行,writeHost不负担读压力
writeType表示写模式
writeType=”0″,所有的操作发送到配置的第一个writehost
writeType=”1″,随机发送到配置的所有writehost
writeType=”2″,不执行写操作
switchType指的是切换的模式,目前的取值也有4种:
switchType=‘-1‘ 表示不自动切换
switchType=‘1‘ 默认值,表示自动切换
switchType=‘2‘ 基于MySQL主从同步的状态决定是否切换,心跳语句为show slave status
switchType=‘3‘基于MySQL galary cluster的切换机制(适合集群)(1.4.1),心跳语句为show status like ‘wsrep%‘。