mycat就相当于一个调度器,具有数据库分片功能,本身不存储数据, 其功能是对后端的真实数据库的数据,进行数据划分和数据整合,方便管理


HOW-Mycat-Read&&write separation


现在让我们通过mycat实现数据库的读写分离

本实验中其他配置文件,参见            基于mysql的主从复制之Mycat简单配置和高可用


定义读,写节点


vim   schema.xml

19                 20                            rule="sharding-by-intfile" />
43         balance="1"
44                           writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
45                 select user()
46                
47                 host="hostM1" url="server33.lalala.com:3306" user="mycat"
48                                    password="Mycat+007">
49                        
50
51                 host="hostS1" url="server55.lalala.com:3306" user="mycat"
52                                    password="Mycat+007">
53                    
54                
55                
56        

                        writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">


参数说明:


balance=”1″ writeType=”0″ switchType=”1″

balance

1、balance=0 不开启读写分离机制,所有读操作都发送到当前可用的writehostle .

2、balance=1 全部的readhost与stand by writeHost 参与select语句的负载均衡。简单的说,双主双从模式(M1àS1,M2àS2,并且M1和M2互为主备),正常情况下,M1,S1,S2都参与select语句的复杂均衡。

3、balance=2 所有读操作都随机的在readhost和writehost上分发

writeType

负载均衡类型,目前的取值有3种:
1、writeType=”0″, 所有写操作发送到配置的第一个writeHost。
2、writeType=”1″,所有写操作都随机的发送到配置的writeHost。
3、writeType=”2″,不执行写操作。

switchType

1、switchType=-1 表示不自动切换
2、switchType=1 默认值,自动切换
3、switchType=2 基于MySQL 主从同步的状态决定是否切换



创建只写用户和只读用户


vim server.xml

80         mycat">
81                 Mycat+007
82                 JamesMycatSchema
83
84                
85                
93        
94
95         mycat_r">
96                 cat
97                 JamesMycatSchema
98                 true
99
100        



检测


关闭salve的sql_线程

(因为我们要做读写分离,所以数据库的同步,会对实验造成干扰)


mysql>stop slave sql_thread;
在客户端登陆mycat:    
插入数据:5,mydog,10010


mysql -umycat -pMycat+007 -h172.25.88.33 -P8066




基于Mycat实现的mysql的读写分离_第1张图片



插入之后再读取,也没有看见刚刚插入的id=5


基于Mycat实现的mysql的读写分离_第2张图片



在master(server33)的mysql数据库登陆,db1数据库中查询到了刚刚插入的数据,所以写操作是在master(server33)执行的.



基于Mycat实现的mysql的读写分离_第3张图片


slave(server44)的SQL线程被关闭了,所以slave(server44)的db1也没有id=5的数据



基于Mycat实现的mysql的读写分离_第4张图片



至此读写分离圆满成功~~~~~


















你可能感兴趣的:(mysql,读写分离,mycat,数据库)