基于Mycat实现的mysql的读写分离


mycat就至关于一个调度器,具备数据库分片功能,自己不存储数据, 其功能是对后端的真实数据库的数据,进行数据划分和数据整合,方便管理mysql


HOW-Mycat-Read&&write separation


如今让咱们经过mycat实现数据库的读写分离sql

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


定义读,写节点


vim   schema.xml
vim

19                 <table name="employee" primaryKey="ID" dataNode="dn1,dn2"
20                            rule="sharding-by-intfile" />
43         <dataHost name="server33.lalala.com" maxCon="1000" minCon="10" balance="1"
44                           writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
45                 <heartbeat>select user()</heartbeat>
46                 <!-- can have multi write hosts -->
47                 <writeHost host="hostM1" url="server33.lalala.com:3306" user="mycat"
48                                    password="Mycat+007">
49                         <!-- can have multi read hosts -->
50
51                 <readHost host="hostS1" url="server55.lalala.com:3306" user="mycat"
52                                    password="Mycat+007">
53                 </readHost>     <!-- can have multi read hosts -->
54                 <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
55                 </writeHost>
56         </dataHost>
                        writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">


参数说明:后端


balance=”1″ writeType=”0″ switchType=”1″
负载均衡

balance
ide

一、balance=0 不开启读写分离机制,全部读操做都发送到当前可用的writehostle .
url

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

三、balance=2 全部读操做都随机的在readhost和writehost上分发
线程

writeType

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

switchType

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



建立只写用户和只读用户


vim server.xml

80         <user name="mycat">
81                 <property name="password">Mycat+007</property>
82                 <property name="schemas">JamesMycatSchema</property>
83
84                 <!-- 表级 DML 权限设置 -->
85                 <!--            
86                 <privileges check="false">
87                         <schema name="TESTDB" dml="0110" >
88                                 <table name="tb01" dml="0000"></table>
89                                 <table name="tb02" dml="1111"></table>
90                         </schema>
91                 </privileges>          
92                  -->
93         </user>
94
95         <user name="mycat_r">
96                 <property name="password">cat</property>
97                 <property name="schemas">JamesMycatSchema</property>
98                 <property name="readOnly">true</property>
99
100         </user>



检测


关闭salve的sql_线程

(由于咱们要作读写分离,因此数据库的同步,会对实验形成干扰)


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


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




wKioL1jfnhKBKd_SAABBhY3AO1E512.png



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


wKioL1jfnhGSzjH4AABUc4AU51I822.png



在master(server33)的mysql数据库登录,db1数据库中查询到了刚刚插入的数据,因此写操做是在master(server33)执行的.



wKiom1jfnhLBncmAAABQFehi-Jc982.png


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



wKiom1jfoRizGf3BAAAs9sEPjCM580.png



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

相关文章
相关标签/搜索